2015-10-27 46 views
4

從結論開始,我得到這個錯誤:Laravel測試服務的依賴注入錯誤

[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」測試類似乎是在沒有聲明的依賴的情況下啓動並拋出錯誤。有誰知道如何解決這一問題?提前致謝。

回答

5

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

正確的方法是make(解決)他們通過laravel的app正面。你的測試腳本應該是這樣的:

<?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

+0

它終於成功了!謝謝! – tsuz