为什么我不能在 dusk 的测试用例中注入 class
Why I can't inject a class in a test case with dusk
我正在用 dusk 测试我的 laravel 项目。
我正在尝试在这样的测试中注入依赖项:
....
class PasswordLostTest extends DuskTestCase
{
private $passwordResetRepository;
public function __construct(PasswordResetRepository $passwordResetRepository)
{
$this->passwordResetRepository = $passwordResetRepository;
}
.....
当我运行测试用phpartisandusk.\tests\Browser\PasswordLostTest.php, 我有这个错误:
致命错误:未捕获的 ArgumentCountError:函数参数太少 Tests\Browser\PasswordLostTest::__construct(),0 在 D:\Workspace\classified-ads-mpa\vendor\phpunit\phpunit\src\Framework\TestBuilder.[=33 中传递=] 在第 138 行,恰好在 D:\Workspace\classified-ads-mpa\tests\Browser\PasswordLostTest.php:20
中预期为 1
有什么问题吗?是因为我在测试脚本中吗?
TestCases
没有被容器实例化。其次,您的应用程序在调用安装程序之前未启动,首先调用构造函数。让你的例子在技术上是不可能的。而是在设置方法中使用 resolve()
或 app()->make()
来执行您想要的操作。
您的应用已引导至父测试用例设置,因此调用 parent::setUp();
必不可少。
public function setUp()
{
parent::setUp();
$this->passwordResetRepository = resolve(PasswordResetRepository::class);
}
解决方法如下:
public function setUp(): void
{
parent::setUp();
$this->passwordResetRepository = resolve(PasswordResetRepository::class);
}
警告:void 是强制性的。这就是它不起作用的原因!
非常感谢指导我解决这个问题的mrhn!
我正在用 dusk 测试我的 laravel 项目。
我正在尝试在这样的测试中注入依赖项:
....
class PasswordLostTest extends DuskTestCase
{
private $passwordResetRepository;
public function __construct(PasswordResetRepository $passwordResetRepository)
{
$this->passwordResetRepository = $passwordResetRepository;
}
.....
当我运行测试用phpartisandusk.\tests\Browser\PasswordLostTest.php, 我有这个错误:
致命错误:未捕获的 ArgumentCountError:函数参数太少 Tests\Browser\PasswordLostTest::__construct(),0 在 D:\Workspace\classified-ads-mpa\vendor\phpunit\phpunit\src\Framework\TestBuilder.[=33 中传递=] 在第 138 行,恰好在 D:\Workspace\classified-ads-mpa\tests\Browser\PasswordLostTest.php:20
中预期为 1有什么问题吗?是因为我在测试脚本中吗?
TestCases
没有被容器实例化。其次,您的应用程序在调用安装程序之前未启动,首先调用构造函数。让你的例子在技术上是不可能的。而是在设置方法中使用 resolve()
或 app()->make()
来执行您想要的操作。
您的应用已引导至父测试用例设置,因此调用 parent::setUp();
必不可少。
public function setUp()
{
parent::setUp();
$this->passwordResetRepository = resolve(PasswordResetRepository::class);
}
解决方法如下:
public function setUp(): void
{
parent::setUp();
$this->passwordResetRepository = resolve(PasswordResetRepository::class);
}
警告:void 是强制性的。这就是它不起作用的原因!
非常感谢指导我解决这个问题的mrhn!