我想在我的一个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'的元素。
希望你们能帮助我。 提前谢谢!
答案 0 :(得分:1)
在您的测试套件中,您可以编写一些代码来创建必要的DOM节点。看一下这个答案:https://stackoverflow.com/a/14292476/1915448
在您的情况下,您应该添加#content
节点,以使renderGui()
正常工作。
另一个解决方案是模拟/存根您的Dojo依赖项,以便domConstruct.place()
函数不再尝试添加真正的DOM节点。查看StubModule库,您可以使用它来存根dojo/dom-construct
。