До этого все в шутку не работало должным образом с асинхронным кодом

#javascript #node.js #typescript #jestjs

Вопрос:

  • Я пытаюсь написать несколько тестовых примеров, используя JEST для тестирования моего API. Поэтому в этих случаях мне нужно значение токена JWT. Для получения значения токена я создал асинхронную функцию getJWTToken. Теперь я вызываю эту функцию внутри beforeAll().
  • Но я получаю случайные результаты при выполнении тестовых заданий. В большинстве случаев все тестовые случаи проходят успешно, но в редких случаях я получаю ошибку 403 forbidden, как и до получения значения токена, мои тестовые случаи начали обрабатываться. Может ли кто-нибудь предложить какой-либо обходной путь для этого?
 import app from '../../../src/app';
const { getJWTToken } = require('../../../src/utils/app.util');
const should = require('should');
const request = require('supertest')(app);

describe('API Test Cases :', () => {
  const body = {};
  beforeAll(async () => {
    const data = await getJWTToken();
    body['user_id'] = data[0]['_id'];
    body['token'] = data[0]['token'];
  });
    describe('API 1', () => {
    it('Should fetch', (done) => {
      request.post('endpoint')
      .send({
         requestBody
      })
      .set('Accept', 'application/json')
      .set('Authorization', `bearer ${body['token']}`)
      .expect(commonAssertions)
      .end((err, res) => {
        if (err) return done(err);
        return done();
      });
    });
  });
}
 

Комментарии:

1. Вы пробовали beforeEach()? Тот же синтаксис, но выполняется перед отдельными тестами?

2. Если вы не тестируете свою фактическую конечную точку, что требует времени, вы можете просто имитировать вызовы. Насмешка над вызовами не решает вашу проблему, но помогает вашим тестам, поскольку макет может возвращать любое значение и различные ошибки, поэтому вы можете видеть, что ваша обработка ошибок также работает.

3. @StevenScott Я не пробовал раньше (). Потому что здесь я упомянул только 1 тестовый случай, но на самом деле есть много тестовых случаев, в которых используется один и тот же токен. Поэтому я не хочу повторять одну и ту же функциональность для всех. И да, издевательство будет последним средством, если я не смогу сделать это с таким подходом.