2014-06-18 18 views
0

我想測試我的Laravel控制器,但第二次做了要求:Laravel的TestCase不能運行下一個請求

$this->call('GET', "api/school"); 

總是返回:

Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 

但第一次沒關係。我可以在我的測試方法中多次撥打$this->call?我不想複製代碼,如果是這樣的話,有沒有像Rspec上下文那樣嵌套測試代碼的方法?

回答

1

您的第二個電話的地址正被追加到第一個電話的地址。

$this->call()調用方法request()Symfony\Component\BrowserKit\Client中,其依次調用getAbsoluteUri()

有趣的是getAbsoluteUri()導致您的測試第二次致電/api/school/api/school。以下是來自symfony's source code的getAbsoluteUri()的描述。

獲取URI並將其轉換爲絕對,如果它不是絕對的。

從源代碼看來,它好像需要你以前的調用,並且如果你的第二個請求不是絕對URI,那麼它會追加新的。

因此,要解決這個問題,你必須確保()的調用得到你的絕對URI已經,簡單地做:

$this->call('GET', "/api/school"); 
+0

謝謝你的非常詳細和有用的答案。我不確定這是預期的行爲還是錯誤。 – randomor

+1

@randomor我會說這是預期的行爲。 Laravel使用的BrowserKit客戶端實際上將自己模擬爲一個Web瀏覽器。所以,如果你在瀏覽器中使用'http:// yourweb.com/api/school',並且你點擊一個''',它會發送你到'http: // yourweb.com/API /學校/ API/school'。 (之前我不知道這個''this-> call()'也是那麼強大!) – Unnawut