我有一个模拟模块:
Observable.js
define([], function() {
const Observable = function(data) {
console.log('called'); /* <-- this is shown in console */
this.data = data;
};
return Observable;
});
从我的文件 myFuncs.js
中调用了哪个createNewObservable: function(values) {
return new Observable(values);
},
我正在尝试像这样测试:
describe('createNewObservable', () => {
it("calls Observable", () => {
window.Observable = Observable;
const observableSpy = spyOn(window, 'Observable');
myFuncs.createNewObservable(123);
expect(observableSpy).toHaveBeenCalled();
});
});
不调用间谍并导致测试失败
预期的间谍可以观察到
如上所述,可以看到控制台日志,因此调用了该函数,我显然是在错误地监视它。
如何监视它以捕获呼叫?
答案 0 :(得分:0)
对我来说,这是一个非常有趣的问题。
它不起作用的原因-因为您实际上不打电话给间谍。您从模块中调用真实可观察的。而且我认为您无法直接实现自己想要的。
但是有一个选项-您可以修改createNewObservable函数以将工厂作为第二个参数。因此,结果将类似于此处(简化)
describe('my test', () => {
const Observable = function (data) {
this.data = data;
};
function createNewObservable(values, observer = Observable) {
return new observer(values);
}
it("calls Observable", () => {
const spy = jasmine.createSpy();
createNewObservable(123, spy);
expect(spy).toHaveBeenCalled();
});
})
希望这至少可以有所帮助