Я использую машинопись и шутки. Я пытаюсь выполнить очень простой модульный тест, но он всегда терпит неудачу. Вот мой код:
// init.ts
let initialized = false;
let secretName: string;
export function init(name: string) {
if (initialized) {
throw new Error("Cannot re-initialize.");
}
secretName = name;
initialized = true;
}
export function getSecret(): string {
return secretName;
}
// init.test.ts
describe("init", () => {
async function getTestSubject() {
return await import("./init");
}
it("should set the secret name properly", async () => {
const init = await getTestSubject();
init.init("bruce wayne");
expect(init.getSecret()).toEqual("bruce wayne");
});
it("should throw an exception if initialized more than once", async () => {
const init = await getTestSubject();
const callInit = function() {
init.init("bruce wayne");
};
callInit();
expect(callInit).toThrowError("Cannot re-initialize.");
});
});
Второй модульный тест не пройден из-за исключения. Когда вызывается первый callInit (), это должен быть первый раз, когда init вызывается для этого модульного теста. Тем не менее, это второй раз, когда он вызывается при рассмотрении обоих модульных тестов.
Я подумал, что при динамическом импорте объекта тестирования (например, "./init") в каждом тесте я бы избежал этой проблемы, так как я Первоначально пытался импортировать init сверху:
import {init, getSecret} from "./init";
Есть идеи как это проверить? Я думаю, что это довольно простой c тестовый пример, так что либо в шутке есть огромное ограничение, либо я просто упускаю что-то очевидное ...
Спасибо!