[英]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.