5

我最近发现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]);
        });
    }
});

编辑:我发现了问题所在。我多次运行整个描述,而不是单个规格。

但是,当我这样做时:

    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]);
            }
        });

});

我得到了预期的输出,除了没有关于规范没有通过的细粒度细节。那里有什么帮助吗?

4

1 回答 1

9

您需要为每个测试创建一个闭包,否则在您的第一个示例中,您很多时间只测试最后一个值。它的干净版本如下所示:

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);
    }
});
于 2012-11-20T16:26:13.960 回答