为什么要在续集上的超级测试请求之前运行得更早?

问题描述 投票:0回答:2
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打印。

任何人都知道为什么吗?

jestjs sequelize.js supertest
2个回答
0
投票

我认为是由于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

我希望它会有所帮助。谢谢


0
投票

尝试从async行中删除.end(async (err,res) => {,因此该回调不再被视为异步。

© www.soinside.com 2019 - 2024. All rights reserved.