使用Jest测试异步类方法时出现问题



我有一个类,它有一个名为init((的异步构造函数。我正试图为它创建一个测试,但我遇到了一些问题。代码运行良好,但测试给出以下错误:

超时-在5000ms超时内未调用异步回调由jest.setTimeout.Timeout指定-未调用异步回调在jest.setTimeout.Error:指定的5000ms超时内

这是类:

const { Settings } = require("../models/settings");
const moment = require("moment");
class Config {
async init() {
let settings = await Settings.findOne(); // This looks like the line where it gets stuck
if (!settings) settings = await createDefaultConfig();
this.lastBookableDay = settings.lastBookableDay;
this.slotDuration = settings.slotDuration;
this.interval = settings.interval;
this.expireOffset = settings.expireOffset;
this.cancelationNotice = settings.cancelationNotice;
this.week = settings.week;
}
}
async function createDefaultConfig() {
const settings = await Settings.find();
let last = moment().format("YYYY-MM-DD");
last = moment(last).add(10, "day").unix();
if (settings.length < 1) {
const newSettings = new Settings({
lastBookableDay: last,
slotDuration: 50,
interval: 10,
expireOffset: 60,
cancelationNotice: 24,
week: [...new Array(7)].map(() =>
({ startHours: 10, startMinutes: 0, slotNumber: 5, off: false }))
});
await newSettings.save();
}
}
module.exports = Config;

我还有其他测试可以毫无问题地访问数据库。

这是失败测试的代码(为了简单起见,没有清理数据库(:

const Settings = require("./settings.js");
describe("Settings class", () => {
it("should init settings instance", async () => {
const settings = new Settings();
await settings.init();
console.log(settings)
expect(settings.slotDuration).toBe(50);
})
});

有人能指出我做错了什么吗?谢谢

您的Config类看起来很奇怪,它正在从./settings.js导入Settings,但它没有创建或初始化它的实例。

如果没有看到所有的代码,很难看到上下文,但您的配置类不应该是这样的吗:

const { Settings } = require("../models/settings");
const moment = require("moment");
class Config {
async init() {
const settingsTool = new Settings();
await settingsTool.init();
let settings = await settingsTool.findOne(); // This looks like the line where it gets stuck
if (!settings) settings = await createDefaultConfig();
this.lastBookableDay = settings.lastBookableDay;
this.slotDuration = settings.slotDuration;
this.interval = settings.interval;
this.expireOffset = settings.expireOffset;
this.cancelationNotice = settings.cancelationNotice;
this.week = settings.week;
}
}

最新更新