'' XXXX"不是茉莉花中的构造函数,也不是" XXXX"遇到声明异常

时间:2017-07-13 12:49:34

标签: javascript unit-testing jasmine

我有一个简单的.js文件,我使用jasmine来尝试TDD方法,我有一个简单的探测器,但我的测试用例不会执行我的jaavscript。我不确定我的javacsript代码设置中的jasmine测试套件是否会通过

我的JS代码:

    var Hamming = function(a, b) {
        this.a = a;
        this.b = b;
    }
    var hamming = new Hamming('A', 'BV');
    Hamming.prototype.compute = function() {
    //REST OF THE CODE
    }

MY JASMINE CODE TO TEST ABOVE:?

var Hamming = require('./hamming');

describe('Hamming', function () {
  var hamming = new Hamming();

  it('no difference between identical strands', function () {
    expect(hamming.compute('A', 'A')).toEqual(0);
  });

  xit('complete hamming distance for single nucleotide strand', function () {
    expect(hamming.compute('A','G')).toEqual(1);
  });

}

但是,每当我尝试运行测试用例时,我都会得到这个:

失败: 1)汉明遇到了声明异常   信息:     TypeError:Hamming不是构造函数   堆:     TypeError:汉明不是构造函数

如何修复我的JS代码以使其通过测试?

1 个答案:

答案 0 :(得分:2)

简答:

module.exports = Hamming;添加到hamming.js文件的末尾。

更长的说明:

在您的测试代码中,您尝试从以下行中的文件'./hamming'加载模块:

var Hamming = require('./hamming');

但是,该文件当前未导出任何内容。因此,上面的变量Hamming不包含任何内容,即相当于var Hamming = undefined;。然后,在您的测试代码中,您尝试在运行var hamming = new Hamming();时从零创建实例,从而为您提供错误。

您需要在Hamming文件的末尾导出hamming.js构造函数,如下所示:

var Hamming = function(a, b) {
    this.a = a;
    this.b = b;
}
var hamming = new Hamming('A', 'BV');
Hamming.prototype.compute = function() {
//REST OF THE CODE
}

module.exports = Hamming; // ADD THIS *********

现在运行jasmine测试时,它仍然会失败并显示Expected undefined to equal 0之类的消息。但这是一个“正确”的失败,因为您的compute函数当前没有返回0。 (这就是TDD应该如何工作,你新编写的测试最初会失败。)然而, 显示你的测试代码 被正确导出,并且您的测试代码“看到”Hamming作为构造函数。

您可以了解节点模块的基础知识here或通过Google搜索其他地方。