fre*_*yer 4 javascript unit-testing jasmine
我最近发现了用于单元测试的Jasmine,它似乎是我正在做的一个很好的解决方案.但是,我正在测试大约100种不同的可能性,我不想一遍又一遍地编写相同的代码行.
所以我制作了一个充满测试的对象,并且我正在使用这些测试一遍又一遍地进行单元测试.它在运行时打印出正确数量的测试.它们都通过如下所示.
但后来我将"cero"更改为"cerFOOBARBAZ",它仍然通过,这是错误的.然后我将0更改为任意数字(例如993)并且它不会通过(它不应该,但是所有测试都会失败.
那是怎么回事?
var tests = {
0 : "cero",
1 : "uno",
2 : "dos",
3 : "tres",
4 : "cuatro",
5 : "cinco",
6 : "seis",
7 : "siete",
8 : "ocho",
9 : "nueve",
10 : "diez",
11 : "once",
12 : "doce",
13 : "trece"
};
describe("Numbers Return Correctly", function() {
for(var test in tests) {
it("Returns Correct String Based On Integer Input", function() {
var number = parseInt(test);
expect(number.convertNumToWord("es")).toEqual(tests[test]);
});
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:我发现了什么问题.我多次运行整个描述,而不是单一规格.
但是,当我这样做时:
var tests = {
0 : "cero",
1 : "uno",
2 : "dos",
3 : "tres",
4 : "cuatro",
5 : "cinco",
6 : "seis",
7 : "siete",
8 : "ocho",
9 : "nueve",
10 : "diez",
11 : "once",
12 : "doce",
13 : "trece"
};
describe("Numbers Return Correctly", function() {
//console.log(test);
//console.log(tests[test]);
it("Returns Correct String Based On Integer Input", function() {
for(var test in tests) {
var number = parseInt(test);
expect(number.convertNumToWord("es")).toEqual(tests[test]);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出,除了没有关于哪个规范没有通过的细粒度细节.有帮助吗?
您需要为每个测试创建一个闭包,否则在第一个示例中,您只需要测试很多时间的最后一个值.它的干净版本看起来像这样:
describe("Numbers Return Correctly", function() {
var tests = { }; // ...
function addTest(test) {
it("Returns Correct String Based On Integer Input " + test, function() {
var number = parseInt(test, 10);
expect(number.convertNumToWord("es")).toEqual(tests[test]);
});
}
for(var test in tests) {
addTest(test);
}
});
Run Code Online (Sandbox Code Playgroud)