В этом посте я расскажу, как async-awaits
может помочь нам писать более качественные и чистые тесты. async-await
немного упрощает нам работу с асинхронным программированием, давайте посмотрим, как это работает -
Асинхронное ожидание
async
функции и await
ключевые слова были представлены в версии ECMAScript 2017. Когда вы передаете ключевое слово async
в функцию, она возвращает promise
. И ключевое слово await
ожидает выполнения promise
, прежде чем перейти к следующему шагу.
Итак, как это связано с нашими тестами API? Что ж, давайте рассмотрим пример. Мы напишем тест для создания сообщения пользователя, этот тест сначала создаст пользователя, а затем использует userId
для создания сообщения.
it('/posts', () => { // create user request .post('users') .set('Authorization', `Bearer ${TOKEN}`) .send(data) .then((res) => { expect(res.body.data).to.deep.include(data); userId = res.body.data.id;
// create post using the above userId request .post('posts') .set('Authorization', `Bearer ${TOKEN}`) .send(data) .then((res) => { expect(res.body.data).to.deep.include(data); }); }); });
Вместо того, чтобы создавать эту массивную цепочку и обратные вызовы, как мы делали выше, мы можем вместо этого использовать async-await
, чтобы он выглядел немного чище:
// create async function with 'it' block it('/posts', async () => { // use await to fulfill the promise and get response const userRes = await request .post('users') .set('Authorization', `Bearer ${TOKEN}`) .send(data); expect(userRes.body.data).to.deep.include(data); userId = res.body.data.id;
// do the same for post request too const postRes = await request .post('posts') .set('Authorization', `Bearer ${TOKEN}`) .send(data);
expect(postRes.body.data).to.deep.include(data); });
С помощью async-await
мы делаем код синхронным, когда он делает одно, завершает это и затем переходит к другой задаче. Чтобы сделать его еще чище, мы можем создать функцию async
для генерации пользователей и назвать ее так:
userId = await createRandomUser();
Чтобы увидеть подробное объяснение приведенного выше кода вместе с другими советами по оптимизации, посмотрите видео ниже:
Вы также можете клонировать репозиторий GitHub, чтобы получить доступ к этому коду.
Чтобы узнать больше о тестировании API, ознакомьтесь с моей серией бесплатных руководств здесь —
Я надеюсь, что этот пост помог вам, дайте мне знать в комментариях ниже!
Удачного тестирования! 😄
…
📧 Подпишитесь на мой список рассылки, чтобы получать доступ к большему количеству подобного контента
👍 Подпишитесь на @automationbro в Твиттере, чтобы быть в курсе последних обновлений