我有一个由不同控制器使用的Angular服务。它包含一个期望任何控制器实例作为参数的方法。
myService.methodAbc( ctrl );
我知道如何为服务设置Jasmine规范,但在我的规范中设置一个假控制器时我感到很茫然,所以我可以测试一下这个方法。使用其中一个应用程序的现有控制器感觉不对,因为我的服务测试会破坏我重命名/更改/删除控制器。
任何输入都将不胜感激。我觉得我在这里遗漏了一些明显的东西。
答案 0 :(得分:1)
您可以传入一个普通的对象来充当假控制器。就个人而言,我更喜欢使用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');