setupFiles 在玩笑时的动作序列

时间:2020-12-23 10:46:19

标签: async-await jestjs

我正在尝试设置测试数据以使其符合规范。 我面临下一个问题。 我将请求 db 并希望将结果设置为全局环境。但结果返回未定义。当我在 jest 规范中执行相同的请求时,它通过得很好。

这是我的代码:

preset-test.env.js

(async function () {

    //prepared env
    const superAdminScope = supertest(admin_app);
    try {
        const dbSchoolAdmin = await dbRequest(USERS_COLLECTION, {'profile.email': process.env.SCHOOL_ADMIN_APP_LOGIN});
        window.schoolAdminId = dbSchoolAdmin;
        const login = await adminLogin(superAdminScope, {
            username: process.env.SUPER_ADMIN_FOR_SEED_LOGIN,
            password: process.env.SUPER_ADMIN_FOR_SEED_PSWD
        });
        const cookie = login.headers['set-cookie'][0]
        window.superAdminCookie = cookie;
        window.superAdminScope = superAdminScope;
    }
    catch (e) {
        console.log(e);
    }
})()

jest-config.js

export default {
    automock: false, // [boolean]
    bail: false, // [boolean]
    // moduleFileExtensions: ['js'],
    transform: {},
    collectCoverageFrom: [],
    resetModules: true,

    verbose: true, // [boolean]
    moduleDirectories: ["node_modules", "src"],
    setupFiles: ["./prepare-test-env.js"],
    setupFilesAfterEnv: ["./jest.setup.js"],
};

db_utils.js

export async function dbRequest(collectionName, req, reqType="findOne") {
    let db;
    try {
        db = await mongodb.MongoClient.connect(process.env.DB_CREDS, { useNewUrlParser: true, useUnifiedTopology: true });

    }
    catch(e) {
        console.log(e);
    }
    let dbo = db.db(process.env.DB_NAME);
    let resp;
    switch (reqType) {
        case "find":
            resp = await dbo.collection(collectionName).find(req).toArray();
            break;
        case "findOne":
            try {
                resp = await dbo.collection(collectionName).findOne(req);
            }
            catch(e) {
                console.log(e);
            }
            break;
        // case "remove":
        //     resp = await dbo.collection(collectionName).deleteMany(req)
    }
    db.close()
    return resp
}

我正在使用下一个代码运行测试:

 it.only(`Check password restore with email ${param.user} and question to pass ${param.questionIsPassed}`, async () => {
            const questionResp = await forgotPasswordGetQuestion(session, param.user);
            expect(questionResp.statusCode).toBe(200);
            if (param.emailIsPassed) {
                const userInfoFromDB = await dbRequest(USERS_COLLECTION, {'profile.email': param.user});
                const dbSecurityQuestion = userInfoFromDB.security.question;
...

我正在尝试调试并且得到了相当奇怪的结果。 我设置了断点: breakpoints 在第一个断点处,所有全局变量如

window.superAdminCookie

window.superAdminScope

未定义。

当涉及到第二点时,调试会再次转到 preset-test.env.js,并且所有全局变量都已设置定义。

我无法理解 setupFiles 的逻辑。我需要在所有规范开始之前收到所有数据。

使用的环境: 节点 14.15.1 带有 --experimental-vm-modules,开玩笑 26.6.3,

0 个答案:

没有答案