Что я пытаюсь сделать
Я пытаюсь написать тесты для фрагмента кода, который пытается
- выполнить немедленно, если документ готов или иным образом;
- запускается после завершения загрузки документа.
Это выглядит примерно так:
// this is inside a function that returns a Promise
// and it resolves when `foo()` is called
if (document.readyState === "complete") {
foo()
} else {
window.addEventListener("load", () => foo());
}
Предполагается, что myFunction()
возвращает Обещание, разрешенное только послеfoo()
называется.В идеале я хотел бы написать такой тест:
// put the document in "loading" mode
document.readyState = "loading"
// use a flag to keep track of whether promise has resolved
let complete = false
myFunction().then(() => complete = true)
// check to see that promise has not resolved yet
expect(complete).toBe(false)
// trigger load event and then check to see that the promise is complete
document.triggerLoadEvent()
expect(complete).toBe(true)
То, что я пробовал
Я знаю, что Jest имеет среду JSDOM, поэтому я могу протестироватьПервый случай довольно легко.Однако я не смог понять, как проверить строку:
window.addEventListener("load", () => foo());
Я знаю, что есть jest.spyOn
метод .Но это только говорит мне, что был вызван определенный метод.Это не позволяет мне смоделировать состояние, в котором документ еще не закончил загрузку, а затем впоследствии вызвать «1027 *» для «завершения».