Laravel 5.5 testing ModelNotFoundException exception for delete api routes
I'm having odd behaviour in a laravel 5.5 project. I have some feature tests set up and working, and need to test that a specific route will return a 404 if the id passed in doesn't exist. I have explicit model binding set up in the RouteServiceProvider
for my Note
model
Route::bind('note', function($value){
return Note::where('id', $value)->first() ?? abort(404);
});
This works for my get route test. This test below passes as expected. ($this->headers
is just some bits I set in a setUp method that is needed for a lot of the tests)
/** @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);
}
but this one for the delete route fails ...
/**
* @test
* @expectedException IlluminateDatabaseEloquentModelNotFoundException
*/
public function error_received_if_note_not_found()
{
$this->withExceptionHandling();
$response = $this->json('DELETE', '/api/v1/note/1', , $this->headers);
$response->assertStatus(404);
}
with message
Failed asserting that exception of type "IlluminateDatabaseEloquentModelNotFoundException" is thrown.
I get that technically the exception is correct, but I want to assert that I get a 404 error code.
Here is the routes/api.php file
Route::apiResource('note', 'NoteController')->only([
'show',
'destroy'
]);
I'm pulling my hair out. Any ideas welcome.
php laravel laravel-5 phpunit
add a comment |
I'm having odd behaviour in a laravel 5.5 project. I have some feature tests set up and working, and need to test that a specific route will return a 404 if the id passed in doesn't exist. I have explicit model binding set up in the RouteServiceProvider
for my Note
model
Route::bind('note', function($value){
return Note::where('id', $value)->first() ?? abort(404);
});
This works for my get route test. This test below passes as expected. ($this->headers
is just some bits I set in a setUp method that is needed for a lot of the tests)
/** @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);
}
but this one for the delete route fails ...
/**
* @test
* @expectedException IlluminateDatabaseEloquentModelNotFoundException
*/
public function error_received_if_note_not_found()
{
$this->withExceptionHandling();
$response = $this->json('DELETE', '/api/v1/note/1', , $this->headers);
$response->assertStatus(404);
}
with message
Failed asserting that exception of type "IlluminateDatabaseEloquentModelNotFoundException" is thrown.
I get that technically the exception is correct, but I want to assert that I get a 404 error code.
Here is the routes/api.php file
Route::apiResource('note', 'NoteController')->only([
'show',
'destroy'
]);
I'm pulling my hair out. Any ideas welcome.
php laravel laravel-5 phpunit
add a comment |
I'm having odd behaviour in a laravel 5.5 project. I have some feature tests set up and working, and need to test that a specific route will return a 404 if the id passed in doesn't exist. I have explicit model binding set up in the RouteServiceProvider
for my Note
model
Route::bind('note', function($value){
return Note::where('id', $value)->first() ?? abort(404);
});
This works for my get route test. This test below passes as expected. ($this->headers
is just some bits I set in a setUp method that is needed for a lot of the tests)
/** @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);
}
but this one for the delete route fails ...
/**
* @test
* @expectedException IlluminateDatabaseEloquentModelNotFoundException
*/
public function error_received_if_note_not_found()
{
$this->withExceptionHandling();
$response = $this->json('DELETE', '/api/v1/note/1', , $this->headers);
$response->assertStatus(404);
}
with message
Failed asserting that exception of type "IlluminateDatabaseEloquentModelNotFoundException" is thrown.
I get that technically the exception is correct, but I want to assert that I get a 404 error code.
Here is the routes/api.php file
Route::apiResource('note', 'NoteController')->only([
'show',
'destroy'
]);
I'm pulling my hair out. Any ideas welcome.
php laravel laravel-5 phpunit
I'm having odd behaviour in a laravel 5.5 project. I have some feature tests set up and working, and need to test that a specific route will return a 404 if the id passed in doesn't exist. I have explicit model binding set up in the RouteServiceProvider
for my Note
model
Route::bind('note', function($value){
return Note::where('id', $value)->first() ?? abort(404);
});
This works for my get route test. This test below passes as expected. ($this->headers
is just some bits I set in a setUp method that is needed for a lot of the tests)
/** @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);
}
but this one for the delete route fails ...
/**
* @test
* @expectedException IlluminateDatabaseEloquentModelNotFoundException
*/
public function error_received_if_note_not_found()
{
$this->withExceptionHandling();
$response = $this->json('DELETE', '/api/v1/note/1', , $this->headers);
$response->assertStatus(404);
}
with message
Failed asserting that exception of type "IlluminateDatabaseEloquentModelNotFoundException" is thrown.
I get that technically the exception is correct, but I want to assert that I get a 404 error code.
Here is the routes/api.php file
Route::apiResource('note', 'NoteController')->only([
'show',
'destroy'
]);
I'm pulling my hair out. Any ideas welcome.
php laravel laravel-5 phpunit
php laravel laravel-5 phpunit
edited Nov 23 '18 at 16:29
Remul
1,1681313
1,1681313
asked Nov 23 '18 at 16:03
John HalseyJohn Halsey
900725
900725
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I think Ive figured this out encase anyone else has this problem.
In the delete test, I removed the $this->withExceptionHandling();
line. Which then allows the test to pass.
If I do the same in the get test it fails. So the get test needs it, but the delete test doesn't.
Randomly.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53449784%2flaravel-5-5-testing-modelnotfoundexception-exception-for-delete-api-routes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I think Ive figured this out encase anyone else has this problem.
In the delete test, I removed the $this->withExceptionHandling();
line. Which then allows the test to pass.
If I do the same in the get test it fails. So the get test needs it, but the delete test doesn't.
Randomly.
add a comment |
I think Ive figured this out encase anyone else has this problem.
In the delete test, I removed the $this->withExceptionHandling();
line. Which then allows the test to pass.
If I do the same in the get test it fails. So the get test needs it, but the delete test doesn't.
Randomly.
add a comment |
I think Ive figured this out encase anyone else has this problem.
In the delete test, I removed the $this->withExceptionHandling();
line. Which then allows the test to pass.
If I do the same in the get test it fails. So the get test needs it, but the delete test doesn't.
Randomly.
I think Ive figured this out encase anyone else has this problem.
In the delete test, I removed the $this->withExceptionHandling();
line. Which then allows the test to pass.
If I do the same in the get test it fails. So the get test needs it, but the delete test doesn't.
Randomly.
answered Nov 23 '18 at 16:09
John HalseyJohn Halsey
900725
900725
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53449784%2flaravel-5-5-testing-modelnotfoundexception-exception-for-delete-api-routes%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown