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 

В реальном приложении тело генерируется, поэтому я хочу проверить, правильно ли оно сгенерировано. Как я могу это сделать?

Ответы на вопрос(1)

Ваш ответ на вопрос