JavaScript:测试函数
我为我的“计数器”编写了“测试”函数,但它不起作用!你能帮助我理解我错在哪里吗 “test”必须有一个名为“toEqual”的方法 附言:“柜台”很好JavaScript:测试函数,javascript,Javascript,我为我的“计数器”编写了“测试”函数,但它不起作用!你能帮助我理解我错在哪里吗 “test”必须有一个名为“toEqual”的方法 附言:“柜台”很好 功能测试(数据){ toEqual:功能(e){ 返回( this.data.bind(this)==e?console.log('good'):console.log('sucks!') ); } } 常量计数器=(状态=0,操作)=>{ 开关(动作类型){ 案例“增量”: 返回状态+1; “减量”一案: 返回状态-1; 违约: 返回状态;
功能测试(数据){
toEqual:功能(e){
返回(
this.data.bind(this)==e?console.log('good'):console.log('sucks!')
);
}
}
常量计数器=(状态=0,操作)=>{
开关(动作类型){
案例“增量”:
返回状态+1;
“减量”一案:
返回状态-1;
违约:
返回状态;
}
}
试验(
计数器(0,{type:'INCREMENT'})
).toEqual(1);
试验(
计数器(1,{type:'INCREMENT'})
).toEqual(2);
试验(
计数器(2,{类型:'减量'})
).toEqual(1);
试验(
计数器(2,{类型:'减量'})
).toEqual(0);
试验(
计数器(1,{键入:'SOMETHING_other'})
).toEqual(1);
试验(
计数器(未定义,{})
).toEqual(0)代码>简化代码将有助于解开一些困惑,并解决您遇到的语法问题
您当前的test
函数被错误地写为既是一个函数的尝试,也是一个对象。只需将test
作为一个对象(可能是测试库的开始),并将toEqual
作为一个函数(测试库中的第一个函数),它接受两个参数,如下所示:
const test = {
toEqual: function(counterInstance, expected) {
return counterInstance === expected ? console.log('they are equal') : console.log('they are not equal');
}
}
在您更好地掌握语法之前,我建议您暂缓使用语法。只需使用更简单的函数语法编写计数器
:
const counter = function(state, action) {
switch (action.type) {
case 'INCREMENT':
return state + 1;
case 'DECREMENT':
return state - 1;
default:
return state;
}
}
然后,只需使用两个参数调用toEqual
函数,如下所示:
test.toEqual(counter(0, { type: 'INCREMENT' }), 1);
您的代码出现语法错误!您混淆了函数和对象文字。函数没有方法。@Bergi-也许我误解了您的评论,但请注意JavaScript“对象”最有可能以函数作为成员。此外,您不能像属性一样访问数据参数(this.
),调用计数器的结果是一个数字,因此您不能bind()
it.@DavidW当然,但OP对这些不感兴趣(可能不知道),所以我忽略了这个细节。他肯定是把语法弄混了,所以这是首先需要解决的问题。我回答了同样的问题,然后看到这个“测试”必须有一个叫做“toEqual”的方法@Craicerjack-谢谢你抓住我的疏忽-更新答案