我正在尝试使用jest测试一个函数,该函数在将任务添加到数组中但出现错误时会回调成功消息



到目前为止,这是我要做的代码。我需要帮助使用jest进行测试功能。Visual studio将错误指向测试函数中的函数addTask("任务3"(。其余代码执行良好,即在向数组添加任务后,我可以显示成功消息。只有在将任务添加到数组之后,测试才能通过显示成功消息的要求。

function successMessage(callback){
callback("Task3");
console.log('success')
}
var tasks=[];
tasks=[{task_content:"Task 1",status:"open"},
{task_content:"Task 2",status:"closed"}];
//Function addTask adds specific task to tasks array
function addTask(add_task) {
var status="open";
var new_task={task_content:add_task,status:status};
tasks.push(new_task);
console.log("After adding on Task 3");
console.log(tasks);

}
console.log("Initially Tasks array: ");
console.log(tasks);
successMessage(addTask)
test('success msg', done => {
function addTask("task3"){
try{
expect("task 3").toEqual({task_content: 'task3', status: 'open'})
done()
}catch(error){
done(error)
}
}
successMessage(addTask);
})

我已经将上述问题转化为使用promise。在使用和返回promise的值而不是回调时,我能够以更简单的理解生成测试用例。我仍然是一个傻瓜,但这就是迄今为止对我有效的方法。

var tasks=[];
tasks=[{task_content:"Task 1",status:"open"},
{task_content:"Task 2",status:"closed"}];
function addTask(add_task) {

var status="open";
var new_task={task_content:add_task,status:status};
tasks.push(new_task);
console.log("After adding on Task 3");
console.log(tasks);

}
function successMessage(){
console.log('success')
}
function first(){
var promise1 = new Promise(function(resolve,reject){
resolve(addTask('task 3'))
})
return promise1;
}
function second(){
var promise2 = new Promise(function(resolve,reject) {
//addTask("task 3")
console.log('success')
resolve(second)

})
return promise2;

}

first();
second();
test('promise',()=>{
return first().then(()=>{
expect(second()).resolves.toBe('success')
})
//expect(first()).then(second()).resolves.toBe('success')
})

试试这个

函数addTask(add_task({

var status="open";
var new_task={task_content:add_task,status:status};
tasks.push(new_task);
console.log("After adding on Task 3");
console.log(tasks);

}
function successMessage(){
console.log('success')
}
function first(){
var promise1 = new Promise(function(resolve,reject){
resolve(addTask('task 3'))
})
return promise1;
}
function second(){
var promise2 = new Promise(function(resolve,reject) {
//addTask("task 3")
console.log('success')
resolve(second)

})
return promise2;

}

first();
second();
test('promise',()=>{
return first().then(successCall=>{
expect(second()).resolves.toBe('success')
})
})

最新更新