2014-03-03 109 views
0

我有一個工匠的命令,我想寫一些單元測試。但是,我在其中使用了一個有副作用的模型,需要模擬/存根。我嘗試使用標準laravel依賴注入方法將該類的對象作爲參數添加到構造函數中,但它不起作用。如何在工匠指令類中模擬/存根/僞造用於測試目的的對象?工匠依賴注入

回答

0

雖然工匠顯然不支持依賴注入,你可以安排事情來允許它。在您正在測試的類中,不是直接調用它來生成對象,而是使用App :: make。然後,您可以使用App :: bind替換另一個類。

所以,在你的目標類,你會:

$obj = App::make('Some_Class'); 
在你的單元測試功能

然後,你會怎麼做:

App::bind('Some_Class', 'SomeClassStub'); 

所以,當你的目標類嘗試創建一個Some_Class對象,它將取而代之得到SomeClassStub的一個對象。

請注意,它可能不會自動查找您要替換的類 - 如果存根類文件不在標準自動加載位置中,則可能需要使用require語句才能使用它。例如,我將我的存根類放在與我的單元測試相同的文件夾中,而不是由laravel自動加載。爲了將目錄添加到自動加載器,我把它放在單元測試構造函數中:

Illuminate\Support\ClassLoader::addDirectories(__DIR__);