У меня есть модуль TypeScript (должен быть неактуальным, поскольку, как я думаю, это влияет на JS), и я пытаюсь протестировать модуль, который у меня есть. Модуль импортирует большое количество данных из внешних файлов и выбирает, какие данные должны быть возвращены на основе переменной.Jest - модуль тестирования несколько раз в одном тестовом наборе
Я пытаюсь запустить некоторые тесты, где я обновляю эту переменную, обновляю модуль и запускаю дополнительные тесты в одном файле. Но моя проблема в том, что файл require
работает только один раз. Я предполагаю, что он кэшируется. Можно ли сообщить функции Jest require
не кешировать или очистить кеш между тестами?
Вот некоторые раздели обратно код, что я пытаюсь достичь:
module.ts
import { getLanguage } from "utils/functions";
import * as messagesEn from "resources/translations/en";
import * as messagesFr from "resources/translations/fr";
// Determine the user's default language.
const language: string = getLanguage();
// Set messages based on the language.
let messages: LocaleMessages = messagesEn.default;
if (languageWithoutRegionCode === "fr") {
messages = messagesFr.default;
}
export { messages, language };
test.ts
import "jest";
// Mock the modules
const messagesEn = { "translation1": "English", "translation2": "Words" };
const messagesFr = { "translation1": "Francais", "translation2": "Mots" };
const getLangTest = jest.fn(() => "te-ST");
const getLangEn = jest.fn(() => "en-GB");
const getLangFr = jest.fn(() => "fr-FR");
jest.mock("resources/translations/en",() => ({"default": messagesEn}));
jest.mock("resources/translations/fr",() => ({"default": messagesFr}));
jest.mock("utils/functions",() => ({
getLanguage: getLangTest
})
);
describe("Localisation initialisation",() => {
it("Sets language",() => {
const localisation = require("./localisation");
expect(getLangTest).toHaveBeenCalled();
expect(localisation.language).toEqual("te-ST");
expect(localisation.messages).toEqual(messagesEn);
});
it("Sets english messages",() => {
// THIS GETS THE MODULE FROM THE CACHE
const localisation = require("./localisation");
expect(getLangEn).toHaveBeenCalled();
expect(localisation.language).toEqual("en-GB");
expect(localisation.messages).toEqual(messagesEn);
});
it("Sets french messages",() => {
// THIS GETS THE MODULE FROM THE CACHE
const localisation = require("./localisation");
expect(getLangFr).toHaveBeenCalled();
expect(localisation.language).toEqual("fr-FR");
expect(localisation.messages).toEqual(messagesFr);
});
});
Я знаю, второй и третий тесты не будут работать, так как мне нужно будет обновить макет "utils/functions"
. Проблема в том, что код в module.ts запускается только один раз.
Спасибо, что поделились этим решением! Это то, что мне нужно. – Aaron
По-прежнему актуально много времени спустя - спасибо! – fl0shizzle