簡體   English   中英

Mocha單元測試和`for`循環中的斷言

[英]Mocha unit tests and assertions in `for`loop

我正在研究Gulp插件,該插件允許使用以不同於英語的語言編寫的保留字來編寫JavaScript代碼-它的主要作用是翻譯,但這不是我要的。

用Mocha和Should.js編寫單元測試,我注意到我不能像這樣使用for循環:

 describe('Proper translating JavaScript PL into JavaScript', function () {
    var asserts = [
        {
            passed: '(tak || nie) && (prawda || fałsz)',
            expected: '(true || false) && (true || false)'
        },
        {
            passed: 'jeśli (tak) { jeżeli (prawda) {}}',
            expected: 'if (true) { if (true) {}}'
        },
        {
            passed: 'przez (zm i = 1; i <= 3; console.log(i++));',
            expected: 'for (var i = 1; i <= 3; console.log(i++));'
        },
        {
            passed: 'zm sum = funkcja (a, b) { zwróć a + b; };',
            expected: 'var sum = function (a, b) { return a + b; };'
        },
        {
            passed: 'generator snowball() { zm a = 1; dostarcz a++; }',
            expected: 'function* snowball() { var a = 1; yield a++; }'
        },
        {
            passed: 'lol',
            expected: 'zap'
        }
    ];

    for (var i = 0, l = asserts.length; i < l; i++) {
        var assert = asserts[i];
        var desc = 'should turn `' + assert.passed + '` into `' + assert.expected + '`';
        it(desc, function (done) {
            tester(assert.passed, assert.expected, done);
        });
    }
});

當我執行上述操作時,一個錯誤被聲明為failing次數與聲明次數相同。

在此處輸入圖片說明

如您所見,盡管有2個錯誤,但我們還是有6個失敗。此外,這里僅提及其中一個。

我不想重復描述如下語句:

describe('Proper translating JavaScript PL into JavaScript', function () {
    var asserts = [
        {
            passed: '(tak || nie) && (prawda || fałsz)',
            expected: '(true || false) && (true || false)'
        },
        {
            passed: 'jeśli (tak) { jeżeli (prawda) {}}',
            expected: 'if (true) { if (true) {}}'
        },
        {
            passed: 'przez (zm i = 1; i <= 3; console.log(i++));',
            expected: 'for (var i = 1; i <= 3; console.log(i++));'
        },
        {
            passed: 'zm sum = funkcja (a, b) { zwróć a + b; };',
            expected: 'var sum = function (a, b) { return a + b; };'
        },
        {
            passed: 'generator snowball() { zm a = 1; dostarcz a++; }',
            expected: 'function* snowball() { var a = 1; yield a++; }'
        },
        {
            passed: 'lol',
            expected: 'zap'
        }
    ];

    it('should be kicking 1', function (done) {
        tester(asserts[0].passed, asserts[0].expected, done);
    });
    it('should be kicking 2', function (done) {
        tester(asserts[1].passed, asserts[1].expected, done);
    });
    it('should be kicking 3', function (done) {
        tester(asserts[2].passed, asserts[2].expected, done);
    });
    it('should be kicking 4', function (done) {
        tester(asserts[3].passed, asserts[3].expected, done);
    });
    it('should be kicking 5', function (done) {
        tester(asserts[4].passed, asserts[4].expected, done);
    });
    it('should be kicking 6', function (done) {
        tester(asserts[5].passed, asserts[5].expected, done);
    });
});

這些should be kicking N沒關系-我一直懶於寫類似的東西:

it('should turn `(tak || nie) && (prawda || fałsz)` into `(true || false) && (true || false)`', function (done) {
    tester('(tak || nie) && (prawda || fałsz)', '(true || false) && (true || false)', done);
});

無論如何,進行獨立的斷言測試可以。

在此處輸入圖片說明

在這兩種情況下,前5個測試均成功,在這里我們根本不考慮它們。 我們關注的測試是這6個放入asserts

在單獨的it()進行測試可以正常進行。 for循環中for測試,一個失敗使asserts.length失敗,另外一個失敗使其他未看到。

將代碼包裝在閉包中:

for (var i = 0, l = asserts.length; i < l; i++) {
  (function(n) {
    var assert = asserts[n];
    var desc = 'should turn `' + assert.passed + '` into `' + assert.expected + '`';
    it(desc, function (done) {
        tester(assert.passed, assert.expected, done);
    });
  })(i);
}

或使用asserts.forEach

JS Bin: https//jsbin.com/kinuvedisa/edit? html,js,輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM