我有一个简单的.js文件,我正在使用茉莉花尝试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)Hamming遇到声明异常

信息:


  TypeError:Hamming不是构造函数


堆:


  TypeError:Hamming不是构造函数


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

最佳答案

简短答案:

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 *********


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

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

10-05 18:40