Использование Jest для тестирования кода, который должен выполняться до document.readyState === "complete" - PullRequest
0 голосов
/ 06 декабря 2018

Что я пытаюсь сделать

Я пытаюсь написать тесты для фрагмента кода, который пытается

  1. выполнить немедленно, если документ готов или иным образом;
  2. запускается после завершения загрузки документа.

Это выглядит примерно так:

// 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 *» для «завершения».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...