我的服务对象如下所示:
var appService = {
serviceOne: {
get: function(){}
},
serviceTwo: {
query: function(){}
}
}
我想模拟 appService,例如:
expect(appService.serviceTwo.query).toHaveBeenCalled();
我该怎么做呢?
我的服务对象如下所示:
var appService = {
serviceOne: {
get: function(){}
},
serviceTwo: {
query: function(){}
}
}
我想模拟 appService,例如:
expect(appService.serviceTwo.query).toHaveBeenCalled();
我该怎么做呢?
好的,我得到了这个:
appService: {
serviceOne: jasmine.createSpyObj('serviceOne', ['get']),
serviceTwo: jasmine.createSpyObj('serviceTwo', ['query'])
}
我希望这是正确的做法。
只需将函数替换为 jasmine 间谍:
var appService = {
serviceOne: {
get: jasmine.createSpy()
},
serviceTwo: {
query: jasmine.createSpy()
}
}
稍后的:
expect(appService.serviceTwo.query).toHaveBeenCalled()
我遇到了一个非常相似的问题,并找到了一个可以相对轻松地在多个级别进行间谍活动的解决方案。
appService = {
serviceOne: jasmine.createSpy().and.returnValue({
get: jasmine.createSpy()
},
serviceTwo: jasmine.createSpy().and.returnValue({
query: jasmine.createSpy()
}
}
此解决方案允许在单元测试中调用以下代码
expect(appService.serviceOne).toHaveBeenCalledWith('foobar');
expect(appService.serviceOne().get).toHaveBeenCalledWith('some', 'params');
注意:此代码未经测试;但是,我在我的一个应用程序中有一个非常相似的实现。希望这可以帮助!
上面的示例显示了显式的命名间谍创建。但是,可以简单地继续在jasmine.spyOn
函数中进行链接以到达方法级别。
对于深度嵌套的对象:
var appService = {
serviceOne: {
get: function(){}
}
};
jasmine.spyOn(appService.serviceOne, 'get');
expect(appService.serviceOne.get).toHaveBeenCalled();