简体   繁体   English

在 Laravel 8 中运行多个 PHPUnit 测试时出错

[英]Error when running multiple PHPUnit Tests in Laravel 8

Unit testing in a Laravel 8 project is throwing an error when more than one test is called.当调用多个测试时,Laravel 8 项目中的单元测试会引发错误。 The issue is causing my tests to fail when I run more than one at once.当我一次运行多个测试时,这个问题会导致我的测试失败。 When running a batch of tests the first one runs and passes as expected, Then all subsequent tests fail when trying to run the createApplication() function from the default trait CreatesApplication .当运行一批测试时,第一个测试按预期运行并通过,然后当尝试从默认trait CreatesApplication运行createApplication()函数时,所有后续测试都失败。 All of my tests have been run individually and pass.我所有的测试都单独运行并通过了。

Causing this error:导致此错误:

• Tests\Feature\ProjectDashboardTest > dashboard returns200
   Error

  Call to a member function make() on bool

  at tests/CreatesApplication.php:19
     15▕     public function createApplication()
     16▕     {
     17▕         $app = require_once __DIR__.'/../bootstrap/app.php';
     18▕
  ➜  19▕         $app->make(Kernel::class)->bootstrap();
     20▕
     21▕         return $app;
     22▕     }
     23▕ }

This occurs when the two tests run are identical.当两个测试运行相同时会发生这种情况。

So this code:所以这段代码:

class DashboardTest extends TestCase
{

    public function testDashboardReturns200()
    {
        $response = $this->get('/dashboard');
        $response->assertStatus(200);
    }

    public function testDashboardReturns200V2()
    {
        $response = $this->get('/dashboard');
        $response->assertStatus(200);
    }
}

Gives this result:给出了这个结果:


php artisan test ./tests/feature/DashboardTest.php

   FAIL  Tests\Feature\DashboardTest
  ✓ dashboard returns200
  ⨯ dashboard returns200 v2

  ---

  • Tests\Feature\DashboardTest > dashboard returns200 v2
   Error

  Call to a member function make() on bool

  at tests/CreatesApplication.php:19
     15▕     public function createApplication()
     16▕     {
     17▕         $app = require_once __DIR__.'/../bootstrap/app.php';
     18▕
  ➜  19▕         $app->make(Kernel::class)->bootstrap();
     20▕
     21▕         return $app;
     22▕     }
     23▕ }


  Tests:  1 failed, 1 passed
  Time:   4.02s

Is there a fix I am missing?有没有我缺少的修复程序?

Edit, Added App file as requested编辑,按要求添加应用程序文件

<?php

/*
|--------------------------------------------------------------------------
| Create The Application
|--------------------------------------------------------------------------
|
| The first thing we will do is create a new Laravel application instance
| which serves as the "glue" for all the components of Laravel, and is
| the IoC container for the system binding all of the various parts.
|
*/

$app = new Illuminate\Foundation\Application(
    $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);

/*
|--------------------------------------------------------------------------
| Bind Important Interfaces
|--------------------------------------------------------------------------
|
| Next, we need to bind some important interfaces into the container so
| we will be able to resolve them when needed. The kernels serve the
| incoming requests to this application from both the web and CLI.
|
*/

$app->singleton(
    Illuminate\Contracts\Http\Kernel::class,
    App\Http\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Console\Kernel::class,
    App\Console\Kernel::class
);

$app->singleton(
    Illuminate\Contracts\Debug\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

/*
|--------------------------------------------------------------------------
| Return The Application
|--------------------------------------------------------------------------
|
| This script returns the application instance. The instance is given to
| the calling script so we can separate the building of the instances
| from the actual running of the application and sending responses.
|
*/

return $app;

Because you run require_once , the script isn't loaded a second time and will therefor return a boolean.因为您运行require_once ,该脚本不会再次加载,因此将返回一个布尔值。 Replace require_once with require to solve it.require替换require_once来解决它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM