我有一个由不同控制器使用的Angular服务。它包含一个以任何控制器实例为参数的方法。

myService.methodAbc( ctrl );


我知道如何设置该服务的Jasmine规范,但是在我的规范中设置假控制器时,我很茫然,因此我可以测试所述方法。使用该应用程序现有的控制器之一感觉很不对劲,因为如果我重命名/更改/删除该控制器,我的服务测试就会中断。

任何输入将不胜感激。我觉得我在这里想不到一些明显的东西。

最佳答案

您可以传入一个普通的对象来充当伪控制器。就我个人而言,我更喜欢使用SinonJS为方法创建存根,因为它可以使您的测试断言myServicectrl的交互方式。 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');

09-25 17:18