如何使用不同的输入测试功能
function addTwo (a, b) {
return a + b;
}
//Leave the function call
addTwo(50, 100);
我在学习React,我试图创建一个codecademy类型的网站作为“学习项目”,但已遇到JS问题。如何使用不同的输入测试功能
假如你有上述功能,你如何测试它的多个案例?到目前为止,我正在测试:
eval(CODE PULLED IN HERE) === 150 ? alert('Correct!') : alert('Wrong!');
这显然是要提醒正确,这对这种情况是好的。但对于其他问题(甚至这个问题),我会想要多个测试用例,这就是我被卡住的地方。
那么,我该如何测试多个测试用例,或者是否有其他方法来完成我正在尝试实现的目标呢?
任何帮助/提示大为赞赏,
对于那些谁知道阵营这里的一些代码,看看有点什么,我目前有:
const CodeEditor = React.createClass({
getInitialState() {
var initialValue = [
"function addTwo() {",
" ",
"}",
"//Leave the function call",
"addTwo(50, 100);"
].join("\n");
return {
kataValue: initialValue
}
},
onChange (newValue) {
this.setState({kataValue: newValue});
},
evalCode() {
var val = this.state.kataValue
eval(val) === 150 ? alert('Correct!') : alert('Wrong!');
},
render() {
return (
<div className="code-editor-wrapper">
<AceEditor
name="editor"
mode="sh"
theme="chaos"
onChange={this.onChange}
value={this.state.kataValue}
editorProps={{$blockScrolling: true}}
/>
<button onClick={this.evalCode} className="spec-btn submit-code-btn">Evaluate</button>
</div>
)
}
})
不要在用户代码中包含函数调用。只需要以某种方式命名该功能。而不是直接evaling的用户代码,嵌入到返回用户的功能的功能:
function getUserFunction(code, functionName) {
var userCode = new Function(code + '; return ' + functionName + ';');
return userCode();
}
调用getUserFunction
后,必须将用户编写的函数的引用,你可以经常只要你想执行它。你如何构建你的测试用例以及你想给用户的反馈是由你决定的。
下面是小例子:
var userFn = getUserFunction(this.state.kataValue, 'addTwo');
var testCases = [
[[50, 100], 150],
[[1, 2], 3],
];
var passes = testCases.every(
([input, output]) => userFn(...input) === output
);
if (passes) {
// all test cases pass
}
非常感谢。我正试图实现这一权利。所以我把你的第二个代码snippit放在我的evalCode函数中。我在哪里放第一个代码snippit(getUserFunction fn声明)? – Apswak
无论你想要什么。你可以把它放在组件定义的上面,或者使它成为组件的一个方法。由你决定。 –
可以遍历一堆投入像这样:
function addTwo(a, b) {
return a + b
}
for (var i = 0, j; i < 100; i++) {
for (j = 0; j < 100; j++) {
if (addTwo(i, j) !== i + j) console.error('Wrong output for inputs ' + i + ' and ' + j)
}
}
您可以用'的Math.random()'创建输入和结果? – davidhu2000