簡體   English   中英

Laravel測試服務依賴注入錯誤

[英]Laravel Testing Service Dependency Injection Error

從結論開始,我得到這個錯誤:

[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'運行時才會顯示錯誤。測試類似乎在沒有聲明依賴項的情況下啟動並引發錯誤。 有誰知道如何解決這一問題? 提前致謝。

你不能將類注入到測試中(據我所知),因為它們不是由laravel / phpUnit自動解決的。

正確的方法是通過laravel的app外觀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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM