在laravel 5.5项目中,我的行为很奇怪。我已经设置并运行了一些功能测试,并且需要测试如果传入的ID不存在,则特定路由将返回404。我在RouteServiceProvider
模型的Note
中设置了显式模型绑定
Route::bind('note', function($value){
return Note::where('id', $value)->first() ?? abort(404);
});
这适用于我的路线测试。以下测试如预期般通过。 ($this->headers
只是我在setUp方法中设置的一些测试所需的位)
/** @test */
public function error_received_if_note_does_not_exist()
{
$this->withExceptionHandling();
$response = $this->json('GET', '/api/v1/note/1', [], $this->headers);
$response->assertStatus(404);
}
但是这个删除路由失败了...
/**
* @test
* @expectedException \Illuminate\Database\Eloquent\ModelNotFoundException
*/
public function error_received_if_note_not_found()
{
$this->withExceptionHandling();
$response = $this->json('DELETE', '/api/v1/note/1', [], $this->headers);
$response->assertStatus(404);
}
有消息
Failed asserting that exception of type "\Illuminate\Database\Eloquent\ModelNotFoundException" is thrown.
从技术上讲,我认为异常是正确的,但是我想断言我得到了404错误代码。
这是路由/api.php文件
Route::apiResource('note', 'NoteController')->only([
'show',
'destroy'
]);
我正在拔头发。欢迎提出任何想法。
答案 0 :(得分:0)
我认为我已经弄清楚了其他人有这个问题的可能性。
在删除测试中,我删除了$this->withExceptionHandling();
行。这样才能使测试通过。
如果我在get测试中做同样的事情,它将失败。因此,get测试需要它,而删除测试则不需要。
随意