Я настроил mocha
в качестве тестера для karma
, и до сих пор он работал нормально. Даже некоторые нормальные функции asyn c работали в прошлом. Но теперь я хочу протестировать пользовательское HTML событие и получаю ошибку message Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves
в ожидании разрешения обещания.
Функция oneEvent
в моем коде просто возвращает Обещание разрешается для отправленного события.
В моем приложении работает та же строка const event = await oneEvent(document.body, "colorChange")
, что означает, что событие определенно запускается немедленно и обещание разрешается.
Некоторые люди на форумах рекомендуют отключите параметр timeout через this.enableTimeouts(false)
. Я сделал это, но это не помогло ни одному. У меня проблемы с отладкой этой проблемы, потому что другие обещания работают нормально. Я надеюсь, что у кого-то еще была подобная проблема здесь. Спасибо!
describe("ColorSlider", function() {
this.timeout(10000)
it("check colorChange event", async () => {
const event = await oneEvent(document.body, "colorChange")
// assert(10, 10) // makes no difference
})
})
Редактировать:
Кажется, что it
обратные вызовы не могут получить events
от элементов, которые были интегрированы в dom в более раннем it
обратном вызове. Мне действительно интересно, почему это может иметь место, потому что я все еще могу ссылаться на эти элементы в последующих it
обратных вызовах.
Это, кажется, имеет место, потому что я смог заставить следующий код работать сейчас. Ранее я опубликовал только второй it
обратный вызов.
Теперь, чтобы сделать эту работу, мне пришлось внедрить элемент во dom второй раз, на этот раз внутри той же самой функции it
, например:
describe("ColorSlider", function() {
this.timeout(10000)
const tag = `<${ColorSlider.is}>`
let el
it("loads default", async () => {
el = await fixture(tag)
assert(!!el.offsetParent, true)
})
it("check colorChange event", async () => {
el = await fixture(tag)
const event = await oneEvent(document.body, "colorChange")
})
})
Функция fixture
не делает ничего, кроме интеграции tag
(элемент HTML) в dom. Если я сейчас удалю эту функцию из моего второго it
обратного вызова, снова появится ошибка, которую я описал в OP. Но что я считаю странным, так это то, что я все еще могу ссылаться на элемент из первого it
обратного вызова. Например, я мог бы написать console.log(el)
. Так почему же тогда я не могу получать от него события во втором it
обратном вызове, не реализовав элемент во второй раз?