在Mocha \ Karma Test中找不到的功能

时间:2016-01-12 20:22:43

标签: angularjs mocha karma-runner

我在文件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“事物”

有什么问题?

我的问题已经回答了!我稍后会发布更新代码。

1 个答案:

答案 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而不是函数。