我有一个简单的.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的基础知识,也可以通过在其他地方进行谷歌搜索来学习。