Мокко Чай с Nock: почему я получаю ошибки тайм-аута при выполнении очистки в 'after ()' и 'afterEach ()'? - PullRequest
0 голосов
/ 08 сентября 2018

Я заглушаю (насмешливо?) Запрос на выборку с Nock в пакете мокко / чай, и он, кажется, работает нормально. Но когда я хочу очистить и вернуть все в нормальное состояние после describe, когда я выполняю заглушку nock, я получаю ошибки тайм-аута мокко.

Моя настройка для nock (я собираюсь делать это перед каждым it, с разными URL, сейчас я делаю это только для одного):

it('should succeed for correct nickname, move and gameID with game in progress', () =>
      Promise.resolve()
        .then(_ => {
          nock('http://localhost:8080')
            .post(`/api/user/${nickname}/game/${gameInProgress.id}`)
            .reply(200, {
              message: 'successful move'
            })
          return logic.makeAGameMove(nickname, nickname2, {from: "e2", to: "e4", promotion: "q"}, gameInProgress.id, token)
        })
      .then(res => {
        const {message} = res
        expect(message).to.equal('successful move')
      })

и в конце describe у меня

 afterEach(_=> nock.cleanAll())
 after(_=> nock.restore())

Но я продолжаю получать следующие ошибки

        "after each" hook for "should succeed for correct nickname, move and gameID with game in progress":
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. 
  "after all" hook:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

Я немного растерялся. Я даже пытался обернуть звонки на nock.cleanAll и nock.restore в Promises, но это не помогло. Можете ли вы помочь мне понять, где я иду не так? Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Поскольку вы тестируете асинхронную функцию, необходимо сообщить, что проверяемая функция асинхронная. Вот способ сделать это, добавив ключевое слово async перед вашими async функциями;

it('should succeed for correct nickname, move and gameID with game in progress', async () =>
      Promise.resolve()
        .then(_ => {
          nock('http://localhost:8080')
            .post(`/api/user/${nickname}/game/${gameInProgress.id}`)
            .reply(200, {
              message: 'successful move'
            })
          return logic.makeAGameMove(nickname, nickname2, {from: "e2", to: "e4", promotion: "q"}, gameInProgress.id, token)
        })
      .then(res => {
        const {message} = res
        expect(message).to.equal('successful move')
 });

, а затем добавьте async before the fcallback functions

 afterEach(async _=> nock.cleanAll())
 after(async _=> nock.restore())
0 голосов
/ 08 сентября 2018

Вы предоставляете аргумент для ваших функций стрелок. Мокко считает, что вы используете done, вам просто нужно сделать так, чтобы аргументы не использовались.

(()=>nock.cleanAll())

Вместо:

(_=>nock.cleanAll())
...