如何在Codeception单元测试中检查Symfony发送的电子邮件数量



我可以在功能测试中测试发送的电子邮件数量,但我无法测试单元中发送的电子邮件的数量。

我正在测试一个命令,它根据测试设置发送不同数量的电子邮件。

当我使用:

// tests
public function testShouldSendATestEmailWhenNoParametersArePassedIn() {
$this->assertSame('Success! (Provisionally, as long as no errors follow.)' . PHP_EOL, static::run_verify_send_email_command());
$this->tester->seeEmailIsSent(3);
}

我得到以下错误:

[TypeError] Argument 1 passed to SymfonyComponentHttpKernelProfilerProfiler::loadProfileFromResponse() must be an instance of SymfonyComponentHttpFoundationResponse, null given

如果我注释掉$this->tester->seeEmailIsSent(3);,那么测试将运行并涵盖适当的代码。

Profiler似乎只是一个功能测试(即使用HTTP,而不是命令行),而不是一个单元测试。如何在单元测试中测试Symfony Command发送的电子邮件数量?

我再次查看了代码,并意识到升级codeception/module symfony没有帮助。seeEmailIsSent只有在通过测试发出模拟HTTP请求时才起作用。

单元测试中正确的方法是将mailer类的mock注入到正在测试的类或函数中。

public function testEmailIsSent()
{
$mailerMock = $this->createMock(SymfonyComponentMailer::class);
$mailerMock->expect($this->once())->method('send');
$testInstance = new MyClass($mailerMock);
$testInstance->toSomething();
}

有关模拟的更多信息,请访问https://phpunit.readthedocs.io/en/9.5/test-doubles.html

相关内容

  • 没有找到相关文章

最新更新