我正在尝试设置测试数据以使其符合规范。 我面临下一个问题。 我将请求 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;
...
我正在尝试调试并且得到了相当奇怪的结果。 我设置了断点: 在第一个断点处,所有全局变量如
window.superAdminCookie
window.superAdminScope
未定义。
当涉及到第二点时,调试会再次转到 preset-test.env.js,并且所有全局变量都已设置定义。
我无法理解 setupFiles 的逻辑。我需要在所有规范开始之前收到所有数据。
使用的环境: 节点 14.15.1 带有 --experimental-vm-modules,开玩笑 26.6.3,