簡體   English   中英

使用多種方法時Laravel單元測試控制器錯誤

[英]Laravel Unit testing controllers error when using multiple methods

我正在嘗試通過單元測試來測試某些控制器。 但是,發生了一些奇怪的事情。 在我的測試用例中使用以下代碼:

public function test_username_registration_too_short()
{
    $result = $this->action('POST', 'App\\Controllers\\API\\UserController@store', null, [
        'username' => 'foo'
    ]);
    $this->assertEquals('not_saved', $result->getContent());

// $result = $this->action('POST', 'App\\Controllers\\API\\UserController@store', null, [
//      'username' => 'foo'
// ]);
// $this->assertEquals('not_saved', $result->getContent());
}

public function test_username_registration_too_short_run_2()
{
    $result = $this->action('POST', 'App\\Controllers\\API\\UserController@store', null, [
        'username' => 'foo'
    ]);
    $this->assertEquals('not_saved', $result->getContent());
}

當我運行此代碼時,初始的too_short測試通過了,但是運行2上完全相同的代碼沒有通過(它甚至設法保存了用戶)。 但是,如果我將相同的代碼兩次使用相同的方法(現在注釋掉了),它是否可以正常工作? 我的setUp或tearDown方法中沒有任何內容。 我在這里有點迷路。

控制器中的代碼如下:

$user = new User(Input::all());
if($user->save())
{
    return 'saved';
}
return 'not_saved';

我不會停止重復這個問題。 一個(有點)相似的問題也有相似的答案 TL; DR: 請勿將單元測試框架用於功能/集成測試

這是功能測試的領域,並且有一個很棒的框架叫做Behat。 您應該進行自己的研究,但從本質上講,雖然PHPUnit擅長測試或多或少的獨立功能塊,但它卻可以測試諸如完整請求執行之類的較大功能。 稍后,您將開始遇到會話錯誤,配置錯誤的環境等問題,所有這些都是因為每個請求都應該在其自己的單獨空間中執行,並且您不得不執行相反的操作。 另一方面,Behat的工作方式非常不同,對於每種情況(發布機器人,查看不存在的頁面),它都會向服務器發送一個新請求並檢查結果。 它主要用於通過對最終結果(響應對象/ html / json)進行斷言來對所有共同工作的最終測試。

如果要以正確的方式測試代碼,請考慮使用正確的工具。 一旦了解了Behat的使用方法,您就會愛上它+您可以在Behat中使用PHPUnit進行單獨的聲明。

暫無
暫無

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

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