const request = require('supertest');
const app = require('../app');
request(app)
.get("/videos")
.expect(200)
.end(async (err,res) => {
if (err) {
console.error(err);
done();
} else {
console.log(res.body);
done(); // <- this is the question line
}
如果我从代码中删除完成的内容,则测试将打印结果,但是如果我那里有done
,则仍继续打印序列,但控制台上没有res.body打印。
任何人都知道为什么吗?
我认为是由于javascript的异步特性。
默认情况下,Jest测试在执行结束时会完成。这意味着该测试将无法按预期进行:
const request = require('supertest');
const app = require('../app');
request(app)
.get("/videos")
.expect(200)
.end(async (err,res) => {
if (err) {
console.error(err);
// done();
} else {
console.log(res.body);
// done();
}
问题在于,一旦功能异步完成,测试将立即完成。
放置完成()后移至
const request = require('supertest');
const app = require('../app');
request(app)
.get("/videos")
.expect(200)
.end(async (err,res) => {
if (err) {
console.error(err);
done();
} else {
console.log(res.body);
done();
}
然后,在这种情况下,它在完成测试之前等待完成的功能。
更多详细信息。请检查here。
我希望它会有所帮助。谢谢
尝试从async
行中删除.end(async (err,res) => {
,因此该回调不再被视为异步。