В мокко, как дождаться окончания асинхронного теста перед выполнением другого теста? - PullRequest
0 голосов
/ 10 марта 2020

В мокко у меня есть два теста:

  • первый тест, если метод asyn c получает значение, как следует:
  • второй тест, если при получении значение, этот первый метод имеет «кэшированное» (у меня есть внутренний механизм для этого) значение, поэтому также asyn c.

Поэтому мне нужно убедиться, что мой первый тест полностью done (имеется в виду, что мой первый метод asyn c для получения значения полностью готов) перед выполнением второго.

Вот мой код:

it('Should return a valid value ', () => {
    myService.check('value', (success) => {
        expect(success.isValid)
    });
})
it('Should put the value in cache', () => {
    return myService.getCached('value').then(result => {
        expect(result).to.be.ok;
    })
})

Проблема в том, что второе 'it' запускается до того, как будет выполнено первое ...

Я могу использовать тайм-ауты Например:

it('Should return a valid value ', () => {
    myService.check('value', (success) => {
        expect(success.isValid)
    });
}).timeout(5000)
it('Should put the value in cache', () => {
    return myService.getCached('value').then(result => {
        expect(result).to.be.ok;
    })
})

Но мне это не нравится, это не на 100% надежно, и я считаю, что между двумя тестами нам не следует ждать с фиксированным значением времени!

Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 10 марта 2020

Я бы сделал ваш тест независимым и самореализующимся. Итак, если вы хотите протестировать свой кеш, вам следует кэшировать значение и проверить его в кеше, например:

it('Should put the value in cache', () => {
    myService.check('value1', (success) => {
        return myService.getCached('value1').then(result => {
            expect(result).to.be.ok;
        })
    });

})

Если вы полагаетесь на другие тесты, запущенные до этого, вы:

  • Будем сталкиваться с проблемами, если кто-то перемещает код
  • Будем сталкиваться с проблемами, если проверка по какой-либо причине не пройдена. Вы не хотите зависимость от другого прохождения теста
...