我在文件A中定义了一个简单的类,如下所示:
var canSendTestEmail = (function(){
'use strict';
return{
sendTestEmail: _sendTestEmail()
}
function _sendTestEmail(){
//do something
return null;
}
})
文件A位于同一文件夹中,并通过Karma config
正确加载我在Mocha测试中使用这个类非常简单。测试看起来像这样:
describe('canSendTestEmail', function(){
'use strict';
describe('should send an email', function(){
expect(canSendTestEmail.sendTestEmail()).to.equal(null);
});
});
我正在使用Karma作为测试运行器来测试Angular应用程序。 Chai,Sinon和所有常见的嫌疑人都装好了。
运行测试时,出现以下错误:
TypeError: 'undefined' is not a function (evaluating 'canSendTestEmail.sendTestEmail()')
我已经尝试了各种方法来定义类canSendTestEmail,无论我得到什么类型都无法找到或上面的错误。
我想我在这里遗漏了一些明显的东西。我来自C ++和Java背景,所以这可能是一个javascript“事物”
有什么问题?
我的问题已经回答了!我稍后会发布更新代码。
答案 0 :(得分:0)
类定义有两个问题。
工作版本是这样的:
var canSendTestEmail = (function(){
'use strict';
return{
sendTestEmail: _sendTestEmail // (problem 2) notice no parenthesis here
}
function _sendTestEmail(){
//do something
return null;
}
})() // (problem 1) notice parenthesis here
首先,如问题评论中所述,canSendTestEmail
是一个返回对象的函数。
因此canSendTestEmail.sendTestEmail()
语句尝试调用函数的sendTestEmail()
方法,而不是该函数创建的对象的方法。
这实际上和做这样的事情一样(可以在浏览器javascript控制台中测试):
var func = function (){}
func.sendTestEmail()
VM510:2 Uncaught TypeError: func.sendTestEmail is not a function(…)
第二个问题是,函数_sendTestEmail
实际上是在对象定义中调用的,因此我们将得到像{sendTestEmail: null}
这样的对象 - sendTestEmail
为null而不是函数。