繁体   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