Laravel API 发送带有 JSON 负载的请求后调用测试中断

Laravel API call tests break after sending request with JSON payload

我正在尝试 运行 Laravel 测试中的一系列 API 调用,但由于某种原因,调用 POST 方法时会破坏测试对象的状态根据 test class

文档的默认值
  $userData = json_encode([
             'username' => 'Bender',
             'password' => 'CorrectHorseBatteryStaple123#',
             'questions' => ['What is the airspeed of unladen swallow?'],
             'answers' => ['African or european?'],
             ]);

    $response1 = $this->call('GET', 'languages');
    echo $response1;

    $response = $this->call('POST', 'accounts/create',array(),array(),array(),$userData);
    echo $response;
    $this->assertResponseOk();

    $response1 = $this->call('GET', 'languages'); //this is line 30
    echo $response1;

    $this->assertResponseOk();

第一个 GET 调用,POST 调用正常完成,return 预期结果。但是第二次 GET 调用失败。 (GET 和 POST 调用涉及代码和数据库的完全不同部分,不应相互影响。)

我得到的错误是

1) Project\Test\AccountsTest::testSample
Symfony\Component\HttpKernel\Exception\NotFoundHttpException: 

/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Routing/RouteCollection.php:148
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1054
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1022
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1001
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:775
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:745
/var/www/project/project-backend/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81
/var/www/project/project-backend/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:327
/var/www/project/project-backend/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php:51
/var/www/project/project-backend/test/Routes/AccountsTest.php:30
/var/www/project/project-backend/test/Routes/AccountsTest.php:49

我应该在 POST 调用中将任何特殊值作为参数 3、4、5 传递以使后续调用正常工作吗?

解决了。

问题不在 POST 或 JSON 中,而是

中的代码
symfony/browser-kit/Symfony/Component/BrowserKit/Client.php

试图变得聪明并保留以前请求的历史记录。

在调用了accounts/create之后,然后languages居然去了accounts/languages

$uri 参数的开头添加 / 就成功了。

$response1 = $this->call('GET', '/languages');
$response = $this->call('POST', '/accounts/create',array(),array(),array(),$userData);
$response1 = $this->call('GET', '/languages'); //this now works