【问题标题】:Invalid JSON was returned from the route , Laravel 8 Unit Testing从路由返回了无效的 JSON,Laravel 8 单元测试
【发布时间】:2020-11-18 23:47:55
【问题描述】:

我对 Laravel 测试非常陌生,我正在使用 laravel 8,我想测试的功能是:

当我运行我的测试时,我得到了这个错误:

1) Tests\Unit\appTest\HttpTest\ControllersTest\OrderControllerTest::testStore
Invalid JSON was returned from the route.

感谢您的帮助!

【问题讨论】:

    标签: php laravel api unit-testing


    【解决方案1】:

    你有两种情况

    1. 在您的控制器中,您可以这样做
    return response()->json([
         'order' => $newOrder,
         'status' => ($request->doValidate) ? 'pend' : 'draft'
    ]);
    

    你的测试用例会是一样的

    1. 在您的控制器中,您可以这样做
    return response()->json($newOrder);
    // or
    return $newOrder;
    

    在你的测试用例中你会这样做

    public function testStore()
    {
        Sanctum::actingAs($this->user, ['*']);
        $response = $this->postJson(action('OrderController@store'), [
            'doAssigned' => false,
            'doValidate' => false,
        ]);
    
        $response->assertJsonFragment([
            'status' => 'draft'
        ]);
    } 
    

    【讨论】:

    • 非常感谢您的帮助,但我仍然很困惑,即使进行了更改,我仍然会遇到同样的错误。 Tests\Unit\appTest\HttpTest\ControllersTest\OrderControllerTest::testStore 从路由返回的 JSON 无效
    • 您在返回之前是否使用了return response()->json($newOrder);dd($newOrder);,并将结果粘贴到您的问题中。
    • 是的,我使用了return response()->json($newOrder); dd($newOrder); 位,我仍然得到同样的错误
    • 我想你的代码在某个地方抛出了错误,所以你需要做$response = $this->postJson(action('OrderController@store'), [ 'doAssigned' => false, 'doValidate' => false, ])->dump(); 看看你得到了什么结果。
    猜你喜欢
    • 2017-09-05
    • 2016-03-13
    • 2017-03-18
    • 2021-07-13
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    相关资源
    最近更新 更多