php - Laravel 测试服务依赖注入(inject)错误

标签 php laravel phpunit

从结论开始,我得到了这个错误:

[ErrorException]                                                                                                                                                                                    
Argument 1 passed to SomeValidatorTest::__construct() must be an instance of App\Services\Validators\SomeValidator, none given, called in ....vendor/phpunit/phpunit/src/Framework/TestSuite.php on line 475 and defined  

在 Laravel 应用程序中,我有一个名为“SomeValidator.php”的脚本,如下所示:

<?php namespace App\Services\Validators;

use App\Services\SomeDependency;

class SomeValidator implements ValidatorInterface
{

    public function __construct(SomeDependency $someDependency)
    {
        $this->dependency = $someDependency;
    }

    public function someMethod($uid)
    {
       return $this->someOtherMethod($uid);
    }

}

运行没有错误。

然后测试脚本 SomeValidatorTest.php 看起来像这样:

<?php

use App\Services\Validators\SomeValidator;


class SomeValidatorTest extends TestCase
{
    public function __construct(SomeValidator $validator)
    {
        $this->validator = $validator;
    }

    public function testBasicExample()
    {
        $result = $this->validator->doSomething();
    }
}

仅当测试脚本通过“./vendor/bin/phpunit”运行时才会出现错误测试类似乎在没有声明依赖项的情况下启动并抛出错误。有谁知道如何解决这一问题?提前致谢。

最佳答案

你不能将类注入(inject)到测试中(据我所知),因为它们不会被 laravel/phpUnit 自动解析。

正确的方法是通过 laravel 的 app facade make(解析)它们。您的测试脚本应如下所示:

<?php

class SomeValidatorTest extends TestCase
{
    public function __construct()
    {
        $this->validator = \App::make('App\Services\Validators\SomeValidator');
    }

    public function testBasicExample()
    {
        $result = $this->validator->doSomething();
    }
}

来源:http://laravel.com/docs/5.1/container

关于php - Laravel 测试服务依赖注入(inject)错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33363499/

相关文章:

php - 如何隐藏 div 内容并仅在单击按钮时显示?

PHP代码没有被执行,但是代码显示在浏览器源代码中

javascript - Laravel 中的 Vue Bootstrap 日历

docker - PhpStorm仅运行本地PHPUnit配置。如何强制它使用远程(Docker)?

php - 无法让 PHPUnit 依赖项工作

c# - 关于在 c# 桌面应用程序中使用 php web 服务的问题

php - 如何在 laravel 中永久更改配置文件

php - Laravel 媒体存储最佳实践

php - 如何在 phpunit 中模拟 git diff 的结果

PHP/MySQL 显示结果列表