gist.github.com/xorik/89da2c3c065d1b6b6d10d915191305f2
я есть служба, которая должна создать объект класса электронной почты и передать его третьему классу (email-sender).
Я хочу проверить тело письма, которое генерируется функцией.
Service.php
class Service
{
/** @var EmailService */
protected $emailService;
public function __construct(EmailService $emailService)
{
$this->emailService = $emailService;
}
public function testFunc()
{
$email = new Email();
$email->setBody('abc'); // I want to test this attribute
$this->emailService->send($email);
}
}
email.php:
class Email
{
protected $body;
public function setBody($body)
{
$this->body = $body;
}
public function getBody()
{
return $this->body;
}
}
EmailService.php
interface EmailService
{
public function send(Email $email);
}
Поэтому я создаю класс заглушки для emailService и электронной почты. Но я не могу проверить тело письма. Я также не могу проверить, был ли вызван $ email-> setBody (), потому что электронная почта создается внутри протестированной функции.
class ServiceSpec extends ObjectBehavior
{
function it_creates_email_with_body_abc(EmailService $emailService, Email $email)
{
$this->beConstructedWith($emailService);
$emailService->send($email);
$email->getBody()->shouldBe('abc');
$this->testFunc();
}
}
Я получил это:
Call to undefined method Prophecy\Prophecy\MethodProphecy::shouldBe() in /private/tmp/phpspec/spec/App/ServiceSpec.php on line 18
В реальном приложении тело генерируется, поэтому я хочу проверить, правильно ли оно сгенерировано. Как я могу это сделать?