我有一个由不同控制器使用的Angular服务。它包含一个以任何控制器实例为参数的方法。
myService.methodAbc( ctrl );
我知道如何设置该服务的Jasmine规范,但是在我的规范中设置假控制器时,我很茫然,因此我可以测试所述方法。使用该应用程序现有的控制器之一感觉很不对劲,因为如果我重命名/更改/删除该控制器,我的服务测试就会中断。
任何输入将不胜感激。我觉得我在这里想不到一些明显的东西。
最佳答案
您可以传入一个普通的对象来充当伪控制器。就我个人而言,我更喜欢使用SinonJS为方法创建存根,因为它可以使您的测试断言myService
与ctrl
的交互方式。 Jasmine有其自己的伪对象方法,您也不熟悉该方法。使用SinonJS(and a library which integrates it with Jasmine)时的外观如下:
var fakeController = {
someMethod: sinon.stub(),
anotherMethod: sinon.stub()
};
myService.methodAbc(fakeController);
expect(fakeController.someMethod).toHaveBeenCalledWith('foo', 'bar');
更新:
您可以使用本地Jasmine库执行以下操作:
var fakeController = jasmine.createSpyObj(
'fakeController',
['someMethod', 'anotherMethod']);
myService.methodAbc(fakeController);
expect(fakeController.someMethod).toHaveBeenCalledWith('foo', 'bar');