Jest не выполняет контрольный пример внутри функции forEach - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь выполнить тестовый случай в al oop внутри блока forEach, но переменная, которую я перебираю, всегда выбрасывает undefined. В блоке beforeAll я использую await для получения данных из базы данных и присваиваю массив объектов переменной, чтобы я мог выполнить итерацию массива и выполнить тест для каждого объекта. но когда я пытаюсь сделать это, он всегда выдает TypeError: Невозможно прочитать свойство 'forEach' из неопределенного , кто-нибудь может сказать, что я делаю здесь неправильно?

sample.test.ts

describe('Test suite ', () => {
  let d: any;
  beforeAll(async () => {
    connectToDatabase();
    d = await r.retriveDataFromDb1();
  }, 200000);
  describe('Test suite 1', () => {
    d.forEach(function(v: any) {
      it('test case', async () => {
        console.log(v);
      }, 20000);
    });
  });
});

1 Ответ

2 голосов
/ 20 апреля 2020

Jest-тесты могут выполняться асинхронно, но они определяются синхронно. beforeAll выполняется только при запуске тестов, тест должен быть известен в это время.

Это может быть либо отдельный тест, который динамически создает утверждения:

  let d: any;
  beforeAll(async () => {
    connectToDatabase();
    d = await r.retriveDataFromDb1();
  }, 200000);

  describe('Test suite 1', () => {
    it('test case', () => {
      d.forEach((v: any) => {
        expect(some).toBe(valueThatDependsOnV);
      });
    }, 20000);
  });

, либо асинхронная установка должно происходить в глобальной настройке , где это разрешено:

// setup.js
module.exports = async () => {
  connectToDatabase();
  global.__d__ = await r.retriveDataFromDb1();
};

// teardown.js
module.exports = async function () {
  // disconnect from database
};

__d__ станет доступным во всех тестах:

  describe('Test suite 1', () => {
    __d__.forEach((v: any) => {
      it('test case', async () => {
        ...
      }, 20000);
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...