В этом посте я расскажу, как 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, ознакомьтесь с моей серией бесплатных руководств здесь —

https://www.youtube.com/watch?v=ZSVw3TyZur4&list=PL6AdzyjjD5HDR2kNRU2dA1C8ydXRAaaBV&ab_channel=AutomationBro

Я надеюсь, что этот пост помог вам, дайте мне знать в комментариях ниже!

Удачного тестирования! 😄

📧 Подпишитесь на мой список рассылки, чтобы получать доступ к большему количеству подобного контента
👍 Подпишитесь на @automationbro в Твиттере, чтобы быть в курсе последних обновлений