使用Jasmine测试调用另一个模块的模块

时间:2014-11-10 14:58:48

标签: javascript jasmine

我试图使用Jasmine来测试某些模块化JavaScript正在按预期启动。但是我绕圈子去了。

作为简化示例,我有这两个文件:

// myObj.all.js
;(function() {
    window.myObj = window.myObj || {};

    myObj.all = {
        init: function() {
            myObj.page.init();
        }
    };
}());

// myObj.page.js
;(function() {
    window.myObj = window.myObj || {};

    myObj.page = {
        init: function() {
            console.log('hello');
        }
    };
}());

在HTML中我会打电话:

myObj.all.init();

初始化一切。除了myObj.page之外,还有更多模块,并且对myObj.all.init()的一次调用会初始化所有模块。

我想测试一下,当调用myObj.all.init()时,也会调用myObj.page.init()。我认为这样的事情可以做到,但测试失败了:

spyOn(myObj.page, 'init');
myObj.all.init({});
expect(myObj.page.init).toHaveBeenCalled();

我该如何测试?

1 个答案:

答案 0 :(得分:0)

我从未使用过jasmine,但是验证从另一个方法调用方法的简单方法是mock应该调用的方法。

茉莉似乎支持mocking

在这种情况下,您可以模拟myObj.page.init()以及应该从myObj.all.init()调用的所有其他方法。模拟应该提供一种断言实际调用模拟方法的方法。