Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为函数运行重复的mocha测试_Javascript_Node.js_Mocha.js - Fatal编程技术网

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
进行验证。