[英]Laravel events & macros in testing
在對Laravel項目進行單元測試時,不會注冊宏,也不會觸發應用程序事件。 例如,從app/start/globals.php
需要以下文件:
// app/helpers/nav.php
var_dump("nav.php loaded");
App::before(function($request) {
var_dump("app::before called");
HTML::macro('nav_link', function(..) { .. });
});
HTML::macro('nav_link', function(..) { .. });
僅第一個var_dump將被打印。 似乎未調用App::before
事件。 此外,即使在事件之外,也不會注冊HTML::macro
調用(嘗試使用BadMethodCallException
會拋出該異常)。 這些在正常使用中都可以正常工作。
測試用例非常簡單:
<?php
class ExampleTest extends TestCase {
public function testBasicExample() {
$crawler = $this->client->request('GET', '/');
$this->assertTrue($this->client->getResponse()->isOk());
}
}
我找到了添加助手的正確方案:
require_once
。 由於可以為每個測試重新加載應用程序(而無需清除內部包含文件的緩存),因此這些文件未包含在后續測試中。 一種。 將所有適當的函數轉換為HTML::macro
。 App::before
事件實際上綁定為路由器上的before過濾器-默認情況下不會調用(刪除App::before
或為每個測試調用Route::enableFilters()
)。 require
包含僅包含app / start / globals.php中的宏的文件,而不使用require_once
。 這些需要在每次應用加載時進行注冊(每次測試)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.