茉莉花-间谍“ new myFunction()”未被调用

时间:2018-07-12 09:20:04

标签: javascript jasmine

我有一个模拟模块:

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();
    });
});

不调用间谍并导致测试失败

  

预期的间谍可以观察到

如上所述,可以看到控制台日志,因此调用了该函数,我显然是在错误地监视它。

如何监视它以捕获呼叫?

1 个答案:

答案 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();
    });

})

希望这至少可以有所帮助