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 に答える