Javascript 为函数运行重复的mocha测试
我是新来的Javascript 为函数运行重复的mocha测试,javascript,node.js,mocha.js,Javascript,Node.js,Mocha.js,我是新来的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) {
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;
}
}
var assert=require('assert');
description('regexTest',function(){
它('如果字符串以数字开头,则应返回true',函数(){
var i=1;
while(i++0){
返回true;
}否则{
返回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语句,所以在循环中运行它应该很好
您可能想考虑将一个更冗长的失败消息添加到您的AsStReT语句中,如:
while(i++ <= 100) {
let testStr = Math.random().toString(36).substring(7);
assert.equal(true, regexTest(testStr), 'Test failed on ' + testStr);
}
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);
});
})
while(i++如果在每次执行循环时都进行断言,则测试将在第一次断言错误时结束。如果您想查看测试在100次中失败的次数,可以将测试结果存储在数组中,您可以执行以下操作:
while(i++ <= 100) {
let testStr = Math.random().toString(36).substring(7);
assert.equal(true, regexTest(testStr), 'Test failed on ' + testStr);
}
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);
});
})
var assert=require('assert');
description('regexTest',function(){
它('如果字符串以数字开头,则应返回true',函数(){
var i=1;
var errorsArray=[];
而(i++代码的问题在于,您实际上只测试生成的最后一个随机字符串
另外,正如所提到的,如果打印测试用例失败的字符串会更好
您可以将其框定为:
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();
var assert=require('assert');
函数makeTest(){
描述('regexTest',函数(){
var i=0;
while(i++0){
返回true;
}否则{
返回false;
}
}
makeTest();
这应该行得通
注释:
- 从摩卡医生那里
但它似乎没有运行100个测试。为什么它总是返回一个失败
?另外,如果函数总是返回true
,它会说通过了一个测试
。为什么?因为这里的测试是单个它(…)中的所有内容
函数,所以从技术上讲只有一个测试。在单个测试中,您可以有任意多个断言
。然后,当第一个断言
失败时,测试就会失败。您的代码的问题是,您实际上只测试生成的最后一个随机字符串。这似乎不对,@Koko正在测试eve生成了哪个随机字符串?一旦其中一个随机字符串不匹配,测试就会失败?@Geotob不会。我的答案做了一个小改动。“您实际上只测试生成的最后一个随机字符串”错误。循环最多执行100次,并且每次调用assert
。您可以通过在@Koko的示例中向循环添加一个简单的console.log
进行验证。