«Описание» пропускается при использовании await - PullRequest
0 голосов
/ 22 мая 2019

Описание второго уровня пропускается в отчете об использовании внутри него await.

У меня есть структура теста, в которой я асинхронно считываю файлы на нескольких уровнях в своем тесте и использую данные для проверки.

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


const { expect } = require('chai');

const subList1 = [
  { title: 'subList1_title1', value: '1' },
  { title: 'subList1_title2', value: '2' },
  { title: 'subList1_title3', value: '3' },
];
const subList2 = [
  { title: 'subList2_title1', value: '1' },
  { title: 'subList2_title2', value: '2' },
  { title: 'subList2_title3', value: '3' },
];

const masterList = [
  {
    title: 'subList1',
    value() {
      return subList1;
    },
  },
  {
    title: 'subList2',
    value() {
      return subList2;
    },
  },
];

function getMasterList() {
  return masterList;
}

describe('All Tests', async function () {
  let testMasterList = [];
  testMasterList = await getMasterList();
  testMasterList.forEach(function (item) {
    describe(item.title, async function () {
      const list = await item.value();
      list.forEach(function (element) {
        describe(element.title, function () {
          it('Value should be a string', function () {
            expect(element.value).to.be.a('string');
          });
        });
      });
    });
  });
});
setTimeout(function () {
  run();
}, 1000);

Я использую флаг --delay с mocha для запуска теста.

Если я удаляю2-й await, затем все описания печатаются в консоли.

Ожидаемое:

  subList1
    subList1_title1
      ✓ Value should be a string
    subList1_title2
      ✓ Value should be a string
    subList1_title3
      ✓ Value should be a string

  subList2
    subList2_title1
      ✓ Value should be a string
    subList2_title2
      ✓ Value should be a string
    subList2_title3
      ✓ Value should be a string

Фактическое значение:

subList1_title1
    ✓ Value should be a string

  subList1_title2
    ✓ Value should be a string

  subList1_title3
    ✓ Value should be a string

  subList2_title1
    ✓ Value should be a string

  subList2_title2
    ✓ Value should be a string

  subList2_title3
    ✓ Value should be a string

1 Ответ

0 голосов
/ 24 мая 2019

Посмотрите на Мокко Гиттер еще раз, я попытался ответить на ваш вопрос там.Проблема в динамическом наборе / генерации тестов: вам нужно сначала получить все данные, необходимые для генерации тестов, поэтому, если у теста или набора есть переменная в имени, он требует предварительной загрузки.В качестве альтернативы, если вы определяете тесты статически, то вы можете загрузить асинхронные данные в хуках или в самих тестах.Вот вам ручка .

// Load all data required for suite/test generation first
getMasterList()
  .then(function(testMasterList) {
    testMasterList.forEach(async function(item) {
      item.loaded = await item.value();
    })
    return testMasterList;
  })
  .then(function(testMasterList) {

    describe('All Tests', function () { // Describe is not async, ever...

      testMasterList.forEach(function(item) {
        describe(item.title, function() {
          const list = item.loaded; // Loaded previously in promise form
          list.forEach(function(element) {
            describe(element.title, function() {
              it('Value should be a string', function() {
                chai.expect(element.value).to.be.a('string');
              });
            });
          });
        });
      });
    });
  });
...