如何在功能测试(Symfony2)中测试电子邮件 [英] How to test email in functional test (Symfony2)
问题描述
我正在尝试在功能测试中测试电子邮件...
I'm trying to test email in functional test...
我的源代码与菜谱示例,
控制器:
public function sendEmailAction($name)
{
$message = \Swift_Message::newInstance()
->setSubject('Hello Email')
->setFrom('send@example.com')
->setTo('recipient@example.com')
->setBody('You should see me from the profiler!')
;
$this->get('mailer')->send($message);
return $this->render(...);
}
测试:
// src/Acme/DemoBundle/Tests/Controller/MailControllerTest.php
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class MailControllerTest extends WebTestCase
{
public function testMailIsSentAndContentIsOk()
{
$client = static::createClient();
// Enable the profiler for the next request (it does nothing if the profiler is not available)
$client->enableProfiler();
$crawler = $client->request('POST', '/path/to/above/action');
$mailCollector = $client->getProfile()->getCollector('swiftmailer');
// Check that an e-mail was sent
$this->assertEquals(1, $mailCollector->getMessageCount());
$collectedMessages = $mailCollector->getMessages();
$message = $collectedMessages[0];
// Asserting e-mail data
$this->assertInstanceOf('Swift_Message', $message);
$this->assertEquals('Hello Email', $message->getSubject());
$this->assertEquals('send@example.com', key($message->getFrom()));
$this->assertEquals('recipient@example.com', key($message->getTo()));
$this->assertEquals(
'You should see me from the profiler!',
$message->getBody()
);
}
}
但是我遇到了这个错误:
however I got this error :
PHP致命错误:在服务器上调用成员函数getCollector() 非对象
PHP Fatal error: Call to a member function getCollector() on a non-object
问题来自此行:
$mailCollector = $client->getProfile()->getCollector('swiftmailer');
有什么主意吗?
推荐答案
正在引发异常,因为如果未启用分析器,则getProfile()
返回false.参见此处.
The exception is being thrown because getProfile()
returns false if the profiler is not enabled. see here.
public function getProfile()
{
if (!$this->kernel->getContainer()->has('profiler')) {
return false;
}
return $this->kernel->getContainer()->get('profiler')->loadProfileFromResponse($this->response);
}
此外,enableProfiler()
仅在已启用服务容器的情况下注册了探查器时才启用.参见此处.
Furthermore enableProfiler()
only enables the profiler if it is registered with the service-container aka enabled. see here.
public function enableProfiler()
{
if ($this->kernel->getContainer()->has('profiler')) {
$this->profiler = true;
}
}
现在,您必须确保在测试环境中启用了探查器. (通常应为默认设置)
Now you have to make sure the profiler is enabled in the test environment. ( should normally be the default setting )
config_test.yml
framework:
profiler:
enabled: true
您可以在测试中添加以下内容:
You could add something like this to your test:
$this->assertEquals($this->kernel->getContainer()->has('profiler'), true);
这篇关于如何在功能测试(Symfony2)中测试电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!