簡體   English   中英

Laravel測試中的事件和宏

[英]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());
    }
}

我找到了添加助手的正確方案:

  1. 最初,我將它們作為PHP函數使用-意味着它們所在的文件必須是require_once 由於可以為每個測試重新加載應用程序(而無需清除內部包含文件的緩存),因此這些文件未包含在后續測試中。 一種。 將所有適當的函數轉換為HTML::macro
  2. App::before事件實際上綁定為路由器上的before過濾器-默認情況下不會調用(刪除App::before或為每個測試調用Route::enableFilters() )。
  3. 使用require包含僅包含app / start / globals.php中的宏的文件,而不使用require_once 這些需要在每次應用加載時進行注冊(每次測試)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM