如果测试的操作重定向,则电子邮件的功能测试失败
Functional test of email fails if tested action redirects
控制器操作导致发送电子邮件然后重定向。由于重定向,此操作的功能测试失败。如果重写控制器以呈现模板,则测试通过。 [这似乎大体上是正确的;可以使用 [Symfony 的文档][1]] 中的代码来复制这种情况。
编辑:测试失败
"/usr/bin/php" "/usr/bin/phpunit" "--colors" "--log-junit"
"/tmp/nb-phpunit-log.xml" "--bootstrap"
"/home/george/volunteer/app/bootstrap.php.cache" "--configuration"
"/home/george/volunteer/app/phpunit.xml.dist" "--filter"
"%\btestActivateOrganization\b%"
"/home/george/netbeans-8.0.1/php/phpunit/NetBeansSuite.php"
"--run=/home/george/volunteer/src/Truckee/MatchingBundle/Tests/Controller/AdminControllerTest.php"
PHPUnit 3.7.28 by Sebastian Bergmann.
Configuration read from /home/george/volunteer/app/phpunit.xml.dist
F
Time: 1.36 seconds, Memory: 40.75Mb
There was 1 failure:
1)
Truckee\MatchingBundle\Tests\Controller\AdminControllerTest::testActivateOrganization
Failed asserting that 0 matches expected 1.
/home/george/volunteer/src/Truckee/MatchingBundle/Tests/Controller/AdminControllerTest.php:64
FAILURES! Tests: 1, Assertions: 1, Failures: 1.
Done.
控制器
public function activateOrgAction($id)
{
$em = $this->getDoctrine()->getManager();
$organization = $em->getRepository("TruckeeMatchingBundle:Organization")->find($id);
$temp = $organization->getTemp();
if (true === $temp) {
$organization->setTemp(false);
$organization->setActive(true);
$orgName = $organization->getOrgName();
$em->persist($organization);
$em->flush();
$to = $em->getRepository("TruckeeMatchingBundle:Staff")->getActivePersons($id);
$mailer = $this->container->get('admin.mailer');
$mailer->activateOrgMail($organization, $to);
$flash = $this->get('braincrafted_bootstrap.flash');
$flash->success("$orgName has been activated");
}
return $this->redirect($this->generateUrl('admin_home'));
}
编辑 3:更完整的测试夹具
class AdminControllerTest extends WebTestCase
{
private $client;
public function setUp()
{
$classes = array(
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadFocusSkillData',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadAdminUser',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadStaffUserGlenshire',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadStaffUserMelanzane',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadTemplateData',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadOpportunity',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadVolunteer',
);
$this->loadFixtures($classes);
$this->client = $this->createClient();
$this->client->followRedirects();
}
public function login($user)
{
$crawler = $this->client->request('GET', '/login');
$form = $crawler->selectButton('Login')->form();
$form['_username'] = $user;
$form['_password'] = '123Abcd';
$crawler = $this->client->submit($form);
return $crawler;
}
public function testActivateOrganization()
{
$crawler = $this->login('admin');
$link = $crawler->selectLink('Accept organization')->link();
$crawler = $this->client->click($link);
$mailCollector = $this->client->getProfile()->getCollector('swiftmailer');
$this->assertEquals(1, $mailCollector->getMessageCount());
}
...
}
将此添加到您的单元测试中:
$this->client->followRedirects(false);
参见Symfony docs on Testing。重定向不会自动遵循,但您正在将它们设置为执行此操作。如果你想在测试邮件后跟随下一个重定向,你可以调用j
$crawler = $client->followRedirect();
如果您想改回所有重定向,请致电:
$client->followRedirects();
控制器操作导致发送电子邮件然后重定向。由于重定向,此操作的功能测试失败。如果重写控制器以呈现模板,则测试通过。 [这似乎大体上是正确的;可以使用 [Symfony 的文档][1]] 中的代码来复制这种情况。
编辑:测试失败
"/usr/bin/php" "/usr/bin/phpunit" "--colors" "--log-junit" "/tmp/nb-phpunit-log.xml" "--bootstrap" "/home/george/volunteer/app/bootstrap.php.cache" "--configuration" "/home/george/volunteer/app/phpunit.xml.dist" "--filter" "%\btestActivateOrganization\b%" "/home/george/netbeans-8.0.1/php/phpunit/NetBeansSuite.php" "--run=/home/george/volunteer/src/Truckee/MatchingBundle/Tests/Controller/AdminControllerTest.php" PHPUnit 3.7.28 by Sebastian Bergmann.
Configuration read from /home/george/volunteer/app/phpunit.xml.dist
F
Time: 1.36 seconds, Memory: 40.75Mb
There was 1 failure:
1) Truckee\MatchingBundle\Tests\Controller\AdminControllerTest::testActivateOrganization Failed asserting that 0 matches expected 1.
/home/george/volunteer/src/Truckee/MatchingBundle/Tests/Controller/AdminControllerTest.php:64
FAILURES! Tests: 1, Assertions: 1, Failures: 1.
Done.
控制器
public function activateOrgAction($id)
{
$em = $this->getDoctrine()->getManager();
$organization = $em->getRepository("TruckeeMatchingBundle:Organization")->find($id);
$temp = $organization->getTemp();
if (true === $temp) {
$organization->setTemp(false);
$organization->setActive(true);
$orgName = $organization->getOrgName();
$em->persist($organization);
$em->flush();
$to = $em->getRepository("TruckeeMatchingBundle:Staff")->getActivePersons($id);
$mailer = $this->container->get('admin.mailer');
$mailer->activateOrgMail($organization, $to);
$flash = $this->get('braincrafted_bootstrap.flash');
$flash->success("$orgName has been activated");
}
return $this->redirect($this->generateUrl('admin_home'));
}
编辑 3:更完整的测试夹具
class AdminControllerTest extends WebTestCase
{
private $client;
public function setUp()
{
$classes = array(
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadFocusSkillData',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadAdminUser',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadStaffUserGlenshire',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadStaffUserMelanzane',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadTemplateData',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadOpportunity',
'Truckee\MatchingBundle\DataFixtures\SampleData\LoadVolunteer',
);
$this->loadFixtures($classes);
$this->client = $this->createClient();
$this->client->followRedirects();
}
public function login($user)
{
$crawler = $this->client->request('GET', '/login');
$form = $crawler->selectButton('Login')->form();
$form['_username'] = $user;
$form['_password'] = '123Abcd';
$crawler = $this->client->submit($form);
return $crawler;
}
public function testActivateOrganization()
{
$crawler = $this->login('admin');
$link = $crawler->selectLink('Accept organization')->link();
$crawler = $this->client->click($link);
$mailCollector = $this->client->getProfile()->getCollector('swiftmailer');
$this->assertEquals(1, $mailCollector->getMessageCount());
}
...
}
将此添加到您的单元测试中:
$this->client->followRedirects(false);
参见Symfony docs on Testing。重定向不会自动遵循,但您正在将它们设置为执行此操作。如果你想在测试邮件后跟随下一个重定向,你可以调用j
$crawler = $client->followRedirect();
如果您想改回所有重定向,请致电:
$client->followRedirects();