Javascript '';XXXX“;不是jasmine中的构造函数或;XXXX“;遇到声明异常

Javascript '';XXXX“;不是jasmine中的构造函数或;XXXX“;遇到声明异常,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我有一个简单的.js文件,我正在使用jasmine尝试TDD方法,我有一个简单的问题,但我的测试用例不会执行我的javascript。我不确定jasmine测试套件将通过的javascript代码设置中有什么错误 我的JS代码: var Hamming = function(a, b) { this.a = a; this.b = b; } var hamming = new Hamming('A', 'BV'); Hamming.

我有一个简单的.js文件,我正在使用jasmine尝试TDD方法,我有一个简单的问题,但我的测试用例不会执行我的javascript。我不确定jasmine测试套件将通过的javascript代码设置中有什么错误

我的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:Hamming不是构造函数


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

简短回答:

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

详细解释:

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

var Hamming = require('./hamming');
但是,该文件当前未导出任何内容。因此,上面的变量
Hamming
不包含任何内容,即
var Hamming=未定义的等价物。然后,在测试代码中,当运行
var hamming=new hamming()时,尝试从无到有地创建一个实例,提供您看到的错误

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

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等于0
。但这是一个“正确的”失败,因为您的
compute
函数当前没有返回
0
。(这就是TDD的工作原理,新编写的测试一开始就失败了。)然而,它确实表明您的测试代码正在正确导出,并且您的测试代码“将”
Hamming
视为构造函数


您可以学习节点模块的基础知识,也可以通过谷歌搜索其他地方。

非常感谢您的帮助,但这只是一个简单的问题,为什么我每次都要注释并运行一个测试用例,因为我在代码中调用了这个函数,比如:var hamming=new hamming('GGACG','GGTCG');只有对应的测试用例才会执行expect(hamming.compute('GGACG','GGTCG')).toEqual(1);如何一次执行所有测试用例,而不使用xit,是否需要更改在函数中接受输入的方式?var hamming=新hamming('GGACG','GGTCG');我可以部分回答你的问题,但我认为,你问题的全部答案比我在这里所能说的要广泛得多。我认为你的问题确实需要你学习TDD的整个过程,我强烈鼓励你这样做。对您的问题的一个简短回答(如果我理解正确的话)是,您不必注释掉任何测试,一次只运行一个测试。事实上,您可以一次运行数百个测试。然而,TDD的过程通常包括编写一个失败的测试(“红灯”),修复测试中的代码以使测试通过(“绿灯”),然后重构测试中的代码(有时称为“红灯/绿灯测试”)。然后使用相同的过程进行第二个测试,然后进行第三个测试,等等。因此,代码的“开发”是由“测试”驱动的,因此是“测试驱动的开发”。正如我前面所说,对这个过程的更全面的解释确实需要你去更深入地研究TDD的过程。我真的很喜欢用茉莉花,所以我认为你选择了一个很好的工具来做这件事。祝你在TDD学习中好运。