簡體   English   中英

對功能運行重復的摩卡測試

[英]Running a repeated mocha test for a function

我是新mocha ,我需要進行100次測試。 在以下代碼中,測試了regexTest函數的true

var assert = require('assert');

describe('regexTest',function() {
    it('should return true if the string starts with a number',function() {
        var i = 1;
        while(i++ <= 100) {
            assert.equal(true,regexTest(Math.random().toString(36).substring(7)));
        }
    });
})

function regexTest(randStr) {
    let match = randStr.match(/^\d+/);
    if(match && match.length > 0) {
        return true;
    }else{
        return false;
    }
}

我不確定這是否是在while循環內運行重復測試的正確方法。 另外,我對結果表示懷疑,因為無論如何,它始終會返回通過單個測試的結果。

在這里有什么更好的方法?

因此,首先,您的代碼似乎正確,並且在本地運行它會返回:

~/P/test ➤ node_modules/.bin/mocha x.js 

  regexTest
    1) should return true if the string starts with a number


  0 passing (10ms)
  1 failing

據我所知,沒有官方的方法可以重復斷言語句,因此在循環中運行它應該很好。

您可能要考慮在您的assert語句中添加更詳細的失敗消息,例如:

while(i++ <= 100) {
  let testStr = Math.random().toString(36).substring(7);
  assert.equal(true, regexTest(testStr), 'Test failed on ' + testStr);
}

(以防萬一, ifregexTestregexTest函數中使用if塊,只需return match && match.length

如果在循環的每次執行中都聲明,則測試將在第一個聲明錯誤時結束。 如果要查看測試失敗100次的次數,可以將測試結果存儲在數組中,可以執行以下操作:

var assert = require('assert');

describe('regexTest',function() {
    it('should return true if the string starts with a number',function() {
        var i = 1;
        var errorsArray = [];
        while(i++ <= 100) {
            var randomNumber = Math.random();
            if(!randomNumber.toString(36).substring(7)){
                errorsArray.push(randomNumber);
            }
        }
        assert.equal(0, errorsArray.length, errorsArray);
    });
})

您的代碼存在的問題是,您實際上僅在測試生成的最后一個隨機字符串。

另外,如@Geotob所述 ,如果打印測試用例失敗的字符串,效果會更好。

您可以將其框架如下:

var assert = require('assert');

    function makeTest() {
        describe('regexTest', function () {
            var i = 0;
            while (i++ <= 20) {
                it('should return true if the string starts with a number', function () {
                    var i = 0;
                    let str = Math.random().toString(36).substring(7);
                    let output = regexTest(str);
                    assert.equal(true, output, `Failed on ${str}`);
                });
            }

        });
    }


    function regexTest(randStr) {
        let match = randStr.match(/^\d+/);
        if (match && match.length > 0) {
            return true;
        } else {
            return false;
        }
    }

    makeTest();

這應該工作正常。

注意事項

暫無
暫無

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

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