0
我有一個工匠的命令,我想寫一些單元測試。但是,我在其中使用了一個有副作用的模型,需要模擬/存根。我嘗試使用標準laravel依賴注入方法將該類的對象作爲參數添加到構造函數中,但它不起作用。如何在工匠指令類中模擬/存根/僞造用於測試目的的對象?工匠依賴注入
我有一個工匠的命令,我想寫一些單元測試。但是,我在其中使用了一個有副作用的模型,需要模擬/存根。我嘗試使用標準laravel依賴注入方法將該類的對象作爲參數添加到構造函數中,但它不起作用。如何在工匠指令類中模擬/存根/僞造用於測試目的的對象?工匠依賴注入
雖然工匠顯然不支持依賴注入,你可以安排事情來允許它。在您正在測試的類中,不是直接調用它來生成對象,而是使用App :: make。然後,您可以使用App :: bind替換另一個類。
所以,在你的目標類,你會:
$obj = App::make('Some_Class');
在你的單元測試功能
然後,你會怎麼做:
App::bind('Some_Class', 'SomeClassStub');
所以,當你的目標類嘗試創建一個Some_Class對象,它將取而代之得到SomeClassStub的一個對象。
請注意,它可能不會自動查找您要替換的類 - 如果存根類文件不在標準自動加載位置中,則可能需要使用require
語句才能使用它。例如,我將我的存根類放在與我的單元測試相同的文件夾中,而不是由laravel自動加載。爲了將目錄添加到自動加載器,我把它放在單元測試構造函數中:
Illuminate\Support\ClassLoader::addDirectories(__DIR__);