正确调用 mocha done 回调和 promises
Properly call mocha done callback and promises
我的应用程序中有几个集成测试:
it('creating vehicle', function (done) {
createVehicle()
.then(() => {
done();
})
.catch((err) => {
done(err);
});
});
createVehicle
提出 post 请求并 return 承诺:
return request.json('post', '/api/vehicle/')
.send(obj)
.expect(200)
.then((res) => {
expect(res.body).toExist("Body is empty");
expect(res.body.id).toExist("Id is empty");
return res.body;
});
现在一切正常,但如果我按以下方式重写第一个片段:
it('creating vehicle', function (done) {
createVehicle()
.then(done) //*
.catch(done); //*
});
我从摩卡得到错误
done() invoked with non-Error
我明白为什么。 createVehicle
return res.body
并传递给 then
回调,结果 done
运行 as done(arg)
我得到了错误,因为 mocha done
回调必须在没有错误时不带参数调用,而在有错误时必须带参数调用。
是否可以使用此变体:
.then(done)
.catch(done);
如何实现?
当然,我可以删除return语句,但是createVehicle
在几个地方使用,我需要returned值:
it('creating vehicle with media', function (done) {
createVehicle()
.then(createMedia) //createMedia will get returned value
//....
});
最简单的解决方案是 return promise 而不是必须处理回调,因为 Mocha supports promises out-of-the-box:
it('creating vehicle', function() {
return createVehicle();
});
我的应用程序中有几个集成测试:
it('creating vehicle', function (done) {
createVehicle()
.then(() => {
done();
})
.catch((err) => {
done(err);
});
});
createVehicle
提出 post 请求并 return 承诺:
return request.json('post', '/api/vehicle/')
.send(obj)
.expect(200)
.then((res) => {
expect(res.body).toExist("Body is empty");
expect(res.body.id).toExist("Id is empty");
return res.body;
});
现在一切正常,但如果我按以下方式重写第一个片段:
it('creating vehicle', function (done) {
createVehicle()
.then(done) //*
.catch(done); //*
});
我从摩卡得到错误
done() invoked with non-Error
我明白为什么。 createVehicle
return res.body
并传递给 then
回调,结果 done
运行 as done(arg)
我得到了错误,因为 mocha done
回调必须在没有错误时不带参数调用,而在有错误时必须带参数调用。
是否可以使用此变体:
.then(done)
.catch(done);
如何实现?
当然,我可以删除return语句,但是createVehicle
在几个地方使用,我需要returned值:
it('creating vehicle with media', function (done) {
createVehicle()
.then(createMedia) //createMedia will get returned value
//....
});
最简单的解决方案是 return promise 而不是必须处理回调,因为 Mocha supports promises out-of-the-box:
it('creating vehicle', function() {
return createVehicle();
});