我有一个简单的.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代码以使其通过测试?
答案 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搜索其他地方。