使用Jasmine与DOJO和全局对象

时间:2014-06-13 09:22:37

标签: javascript unit-testing dojo jasmine

我想在我的一个dojo项目中使用Jasmine进行单元测试。问题是我们有一个全局应用程序对象,几乎我们创建的每个其他对象都需要它。

app对象负责初始化应用程序并构建DOM,但这就是问题所在。当我在我的测试中创建app对象时,它试图操纵不存在的DOM元素,并且我得到了一个错误。

以下是一个小例子:

/* app.js */
define(['dojo/_base/declare', 'dojo/dom-construct'],
function(declare, domConstruct){
    return declare([], {
        constructor: function() {
            this.renderGui();
        },
        renderGui: function() {
            var gui = domConstruct.create('div', {innerHTML: 'Hello World!'});
            domConstruct.place(gui, 'content');
        },
        importantFunction: function() {
            return 100;
        }
    });
})

如果我想测试importantFunction,我必须创建一个app实例,但是在构造函数中它调用renderGui函数,我得到了错误,因为没有id为'content'的元素。

希望你们能帮助我。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

在您的测试套件中,您可以编写一些代码来创建必要的DOM节点。看一下这个答案:https://stackoverflow.com/a/14292476/1915448

在您的情况下,您应该添加#content节点,以使renderGui()正常工作。


另一个解决方案是模拟/存根您的Dojo依赖项,以便domConstruct.place()函数不再尝试添加真正的DOM节点。查看StubModule库,您可以使用它来存根dojo/dom-construct