2014-03-03 76 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__);