Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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 如何获得;“返回”;在函数中使用…spread作为参数的函数的集合?_Javascript_Unit Testing_Ecmascript 6_Tdd - Fatal编程技术网

Javascript 如何获得;“返回”;在函数中使用…spread作为参数的函数的集合?

Javascript 如何获得;“返回”;在函数中使用…spread作为参数的函数的集合?,javascript,unit-testing,ecmascript-6,tdd,Javascript,Unit Testing,Ecmascript 6,Tdd,我正在为我的单元测试开发一个简单的Javascript客户机API,因为我正在研究TDD,并通过做一些事情来更好地学习 我遵循的是一个模型,在这个模型中,它们只会是一个逐测试检查,我有我的test函数,在这个函数中,给定文件的所有测试都会被调用,每个测试都会被test\u F调用,每个函数只有一个CHECK,因此,不需要对每个测试进行描述,因为只需一次检查,只需一次好的“名称测试”即可简单易懂 我面临的问题是如何使用Javascript,实际上我很清楚如何在没有Javascript的情况下解决我

我正在为我的单元测试开发一个简单的Javascript客户机API,因为我正在研究TDD,并通过做一些事情来更好地学习

我遵循的是一个模型,在这个模型中,它们只会是一个逐测试检查,我有我的test函数,在这个函数中,给定文件的所有测试都会被调用,每个测试都会被test\u F调用,每个函数只有一个CHECK,因此,不需要对每个测试进行描述,因为只需一次检查,只需一次好的“名称测试”即可简单易懂

我面临的问题是如何使用Javascript,实际上我很清楚如何在没有Javascript的情况下解决我的问题,但我想了解它是否能帮助我简化这里的事情。正如我所说,TEST函数可能会得到几个TEST\u F函数作为参数,所以我想我应该做一些类似于
const TEST=(…F)=>{},但我不确定如何使用每个“f”参数,因为每个TEST\u f函数都会返回一个对象,我想用它来指责失败的TEST\u Fs。我将尝试解释我试图用下面的代码做些什么,我们知道这些代码不起作用,但我只是想了解我想从哪里得到:

/* --------------------------------------------------------------- */
/* ------------------- Test API ---------------------------------- */
/* --------------------------------------------------------------- */

const TEST = (fileName, ...f) => {
    const passing = [];
    const failing = [];
    console.log('Running unit tests in '+fileName+':');

    const tStart = performance.now();

    const result = ...f(); // I know it's not possible, but you understand what I'm trying to do?
    result.resultTest==='passed'?passing.push(result):failing.push(result);

    const tEnd = performance.now();
    const duration = tEnd - tStart;

    const lenPassing = passing.length;
    const lenFailing = failing.length;
    console.log('Passing: '+lenPassing+' ('+duration+'ms)');
    console.log('Failing: '+lenFailing);

    if(lenFailing > 0){
        let stg = '';
        for(let i = 0; i < lenFailing; i++){
           stg += (i + ') ' + failing[i].nameTest + ' (' + failing[i].durationTest + ')' + '\n');
        }
        console.log(stg);
    }
};

const TEST_F = (nameTest, f) => {
    const tStart = performance.now();
    const resultTest = f();
    const tEnd = performance.now();
    const durationTest = tEnd - tStart;
    return { nameTest: nameTest, durationTest: durationTest, resultTest: resultTest }; 
};

const CHECK_EQUAL = (value, expected) => {
    return ((value === expected)?'passed':'failed');
};

export {
    TEST,
    TEST_F,
    CHECK_EQUAL
};
我用@TJ Crowder的答案解决了这个问题:

 for(let fn of f) {
        const result = fn;
        result.resultTest==='passed'?passing.push(result):failing.push(result);
    }

如果您的目标是调用
f
数组中的每个函数,并将它们的结果放入
passing
failing
数组中,我可能会使用一个简单的
来表示of

for (const fn of f) {
    const result = fn();
    result.resultTest==='passed'?passing.push(result):failing.push(result);
}

或者
forEach
或类似的,任何数组循环机制都可以完成这项工作。

“我知道这不可能,但你明白我想做什么吗?”不,恐怕不行。问题中的文本似乎也没有说。你想干什么?调用每个函数?传递什么?期待什么回来?看起来你在等一个对象,但是。。。为什么要尝试使用扩展符号来实现这一点?(注意:
不是操作员,也不可能是操作员,无论是用于排列还是静止。它做操作员不能做的事情。)你的意思是:“没有它,我实际上很清楚如何解决我的问题。”。请给出一个例子,这样我们可以更好地了解你想做什么我已经编辑了这个问题。
for (const fn of f) {
    const result = fn();
    result.resultTest==='passed'?passing.push(result):failing.push(result);
}