Laravel 5.5 testing ModelNotFoundException exception for delete api routes












0















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.










share|improve this question





























    0















    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.










    share|improve this question



























      0












      0








      0








      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.










      share|improve this question
















      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






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 23 '18 at 16:29









      Remul

      1,1681313




      1,1681313










      asked Nov 23 '18 at 16:03









      John HalseyJohn Halsey

      900725




      900725
























          1 Answer
          1






          active

          oldest

          votes


















          0














          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.






          share|improve this answer























            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
            });


            }
            });














            draft saved

            draft discarded


















            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









            0














            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.






            share|improve this answer




























              0














              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.






              share|improve this answer


























                0












                0








                0







                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.






                share|improve this answer













                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.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 23 '18 at 16:09









                John HalseyJohn Halsey

                900725




                900725
































                    draft saved

                    draft discarded




















































                    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.




                    draft saved


                    draft discarded














                    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





















































                    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







                    Popular posts from this blog

                    Costa Masnaga

                    Fotorealismo

                    Sidney Franklin