Проблема с тестированием метода класса asyn c с Jest - PullRequest
0 голосов
/ 03 мая 2020

У меня есть класс с асинхронным конструктором c, который называется init (). Я пытаюсь создать для него тест, но у меня есть некоторые проблемы. Код работает нормально, но тесты выдают следующую ошибку:

Тайм-аут - обратный вызов Asyn c не был вызван в течение времени ожидания 5000 мс, указанного в jest.setTimeout.Timeout - обратный вызов Asyn c был не вызывается в течение времени ожидания 5000 мс, указанного в jest.setTimeout.Error:

Это класс:

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);
  })

});

Может кто-нибудь указать мне, что я делаю неправильно, пожалуйста? Спасибо.

1 Ответ

0 голосов
/ 03 мая 2020

Ваш класс Config выглядит странно, он импортирует Settings из ./settings.js, но не создает его экземпляр или не инициализирует его.

Без просмотра всего кода трудно увидеть контекст, но это не следует твой конфиг-класс выглядит так:

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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...