Symfony2 phpunit在不同的环境下运行测试

时间:2016-10-02 07:18:52

标签: symfony testing phpunit

我正在测试我的symfony2应用程序中的电子邮件发送,我有自定义环境,通过电子邮件设置正确设置,并且它能够实际发送电子邮件。我创建了环境test_emails,我想用它运行我的phpunit测试。

phpunit似乎没有这个功能,所以我唯一的选择可能就是创建自定义引导程序文件,但我无法在任何地方找到它。

4 个答案:

答案 0 :(得分:1)

关于Environments的文档说:

  

编写功能测试时使用test环境,并且无法通过前端控制器直接在浏览器中访问。换句话说,与其他环境不同,没有app_test.php前端控制器文件。

因此,在测试电子邮件时,您应该使用How to Test that an Email is Sent in a Functional Test中详细描述的功能测试。

如果您想使用一些简单的逻辑编写自定义引导程序,请参阅:How to Customize the Bootstrap Process before Running Tests

也许您可以通过创建引导内核的自定义测试用例来实际定制测试工具所使用的环境,就像这里How can I test a service in symfony2?一样,然后将一组选项传递给bootKernel()方法。参见:

答案 1 :(得分:1)

如果您使用Symfonys WebtestCase,您可以将环境设置为选项:

$client = static::createClient(array('environment' => 'test-emails'));

答案 2 :(得分:0)

我最终创建了发送我想要的所有电子邮件的命令,我可以轻松地在不同环境之间切换。

实施例: php app/console app:emails:test-emails --env=dev

答案 3 :(得分:0)

为每个环境使用不同的phpunit.xml配置文件。

.
├── phpunit_test_emails.xml
└── phpunit_other_env.xml

使用特定配置运行测试:

$ phpunit -c phpunit_test_emails.xml

您可以在XML配置文件中设置不同的PHP配置。

您可以通过bootstrap属性创建自定义引导程序,如果需要,可以执行其他初始化。

<phpunit bootstrap="test/bootstrap.php">

    <!-- ... -->

    <php>
        <includePath>.</includePath>
        <ini name="foo" value="bar"/>
        <const name="foo" value="bar"/>
        <var name="foo" value="bar"/>
        <env name="foo" value="bar"/>
        <post name="foo" value="bar"/>
        <get name="foo" value="bar"/>
        <cookie name="foo" value="bar"/>
        <server name="foo" value="bar"/>
        <files name="foo" value="bar"/>
        <request name="foo" value="bar"/>
    </php>

</phpunit>

有关详细信息,请参阅PHPUnit Manual