карма-мокко: обещание превышает тайм-аут - PullRequest
0 голосов
/ 11 февраля 2020

Я настроил 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 обратном вызове, не реализовав элемент во второй раз?

...