为函数运行重复的mocha测试

时间:2017-03-24 07:45:36

标签: javascript node.js mocha

我是新的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循环中运行重复测试的正确方法。此外,我怀疑结果,因为无论如何,它总是返回通过一次测试。

这里有什么更好的方法?

3 个答案:

答案 0 :(得分:0)

首先,您的代码似乎正确并在本地运行它返回:

undefined

据我记得,没有正式的方法来重复断言语句,所以在循环中运行它应该没问题。

您可能需要考虑在断言语句中添加更详细的失败消息,例如:

~/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

(如果它有帮助,您的while(i++ <= 100) { let testStr = Math.random().toString(36).substring(7); assert.equal(true, regexTest(testStr), 'Test failed on ' + testStr); } 函数中不需要if阻止。只需以regexTest结尾

答案 1 :(得分:0)

如果在每次执行循环时断言,测试将在第一个断言错误时结束。如果你想看看你的测试失败的次数是多少,你可以将测试结果存储在一个数组中,你可以这样做:

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

答案 2 :(得分:-2)

您所拥有的代码存在的问题是您实际上只是测试生成的最后一个随机字符串。

此外,如@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();

这应该可以正常工作。

备注