2016-10-02 107 views
2

我在我的symfony2應用程序中測試電子郵件發送,我有自定義環境,適當設置電子郵件設置,它能夠實際發送電子郵件。我創建了環境test_emails,我想用它運行我的phpunit測試。Symfony2 phpunit在不同的環境下運行測試

phpunit似乎沒有這個功能,所以我唯一的選擇可能是創建自定義引導文件,但我找不到如何做到這一點。

回答

0

我已經結束了創建命令,發送所有我想要的電子郵件,我可以輕鬆地在環境之間切換。

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

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

如果您使用Symfonys WebtestCase您可以設置環境選項:爲每個環境

$client = static::createClient(array('environment' => 'test-emails')); 
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瞭解更多詳情。

+0

是的,但是你不能改變你的symfony環境,它總是在'test' env上運行。 – nacholibre

+0

您可以通過引導屬性指定PHPUnit引導(請參閱編輯答案)。但是也許我誤解了你想做的事情。如果你想要爲'$ kernel = new AppKernel('prod',false)指定環境''然後在測試引導程序中定義一個env常量或變量,然後在你的應用程序引導程序中執行一個'if TEST_CONSTANT然後執行此操作否則那樣做......'。 –