猿问

Laravel 路由上的 PHPunit 测试总是返回 404

我刚刚开始在我的 laravel 应用程序上编写 PHPUnit 路由测试,它通过浏览器和 Postman 运行良好,但不是通过 PHPunit。


示例:在本次测试中


public function test_getAll(){

    $this->withoutExceptionHandling(); // If i comment this line I get the 404 and not the error shown below


    $response = $this->get('/api/users');

    $response->assertStatus(401);

}

我得到:


PHPUnit 8.5.3 by Sebastian Bergmann and contributors.


.E                                                                  2 / 2 (100%)


Time: 1.89 seconds, Memory: 8.00 MB


There was 1 error:


1) Tests\Feature\Users\UserRoute_SuperAdminTest::test_getAll

Symfony\Component\HttpKernel\Exception\NotFoundHttpException: GET http://localhost/cms/api/users


E:\www\projects\cms-php\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\InteractsWithExceptionHandling.php:126

E:\www\projects\cms-php\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:415

E:\www\projects\cms-php\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php:113

E:\www\projects\cms-php\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:468

E:\www\projects\cms-php\vendor\laravel\framework\src\Illuminate\Foundation\Testing\Concerns\MakesHttpRequests.php:258

E:\www\projects\cms-php\tests\Feature\Users\UsersRoute-SuperAdmin_Test.php:45

奇怪的是:如果我将 URL 更改为:


$response = $this->get('http://anythingatallinhere/api/users');

我得到了我应该得到的 401 响应。


更多上下文信息来解决问题。


我的 env APP_URL 是APP_URL=http://localhost/cms,我正在以这种方式动态注册路由:我有一个 CoreServiceProvider ,其启动过程如下:


public function boot()

    {

       [...]

        $moduleController = app()->make(ModuleController::class);

        $moduleController->registerCoreRoutes();

       [...]

如果我使用php artisan route:list它们,它们也都已正确注册。



犯罪嫌疑人X
浏览 125回答 2
2回答

翻过高山走不出你

我最近遇到了类似的问题,但运行这些后它起作用了:php&nbsp;artisan&nbsp;config:clear php&nbsp;artisan&nbsp;config:cache特别是如果您更改了 .env 文件中刚刚更改的 APP_URL。您还可以尝试在 phpunit.xml 文件中processIsolation设置:true<phpunit&nbsp;backupGlobals="false" &nbsp;backupStaticAttributes="false" &nbsp;bootstrap="bootstrap/autoload.php" &nbsp;colors="true" &nbsp;convertErrorsToExceptions="true" &nbsp;convertNoticesToExceptions="true" &nbsp;convertWarningsToExceptions="true" &nbsp;processIsolation="true" &nbsp;stopOnFailure="false">编辑:&nbsp;如果上述方法都不起作用,您还可以创建另一个.env.testing并将您的设置APP_URL为http://localhost.&nbsp;PHPUnit 将使用该文件中的变量。无论您的应用程序的实际 URL 是什么,这都有效

芜湖不芜

最简单的方法是通过添加以下行来http://localhost在phpunit.xml文件中设置 APP_URL:<server&nbsp;name="APP_URL"&nbsp;value="http://localhost"/>如果您希望变量在.env测试期间仍然可用,则此方法是最好的。创建您自己的.env.testing文件将覆盖所有.env变量。
随时随地看视频慕课网APP
我要回答