[英]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);
}
(以防万一, if
您regexTest
在regexTest
函数中使用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.