давайте представим, что у нас есть обещание, которое выполняет большое количество операций и возвращает вспомогательные функции. Банальный пример:
const testPromise = testFn => () => {
const helper = Promise.resolve({testHelper: () => 'an helper function'}) // I/O Promise that returns an helper for testing
return helper.then(testFn).finally(() => console.log('tear down'));
}
// This describe would work as expected
describe('Async test approach', () => {
it('A test', testPromise(async ({testHelper}) => {
expect(testHelper()).toBe('an helper function')
}))
})
// This part doesn't work
describe('Async describe approach', testPromise(async ({testHelper}) => {
it('Test 1', () => {
expect(testHelper()).toBe('an helper function')
})
it('Test 2', () => {
expect(testHelper()).not.toBe('A chair')
})
}))
}
Я хотел бы добиться чего-то вроде второго примера, где я могу использовать асин c код в описании без переоценки testPromise
.
describe
не обрабатывает asyn c, поэтому я даже не могу l oop и правильно создавать динамические c тесты.
Я прочитал много комментариев о том, что describe
должен только быть простым способом группировки тестов, но ... тогда ... как кто-то может создавать асинхронные c сгенерированные тесты на основе результатов ввода / вывода?
Спасибо
= ДОПОЛНИТЕЛЬНОЕ РАССМОТРЕНИЕ =
Что касается комментариев, которые вы, ребята, любезно добавили, я должен был добавить несколько дополнительных деталей ...
Я хорошо знаю, что тесты должны определяться синхронно :), именно здесь начинаются проблемы. Я полностью не согласен с этим, и я пытаюсь найти альтернативу, которая избегает до / после и делает это без указания внешней переменной. В Jest проблемах был открытый вопрос для решения этой проблемы, кажется, они согласились сделать описание asyn c, но они не будут этого делать. Причина в том, что ... Jest использует реализацию Java для Jasmine, и это "исправление" должно быть сделано там.
Я хотел избегать beforeAll
и afterAll
, насколько мог. Моей целью было создание простого (и аккуратного) способа определения интеграционных тестов, адаптированных к моим потребностям, не позволяя пользователям беспокоиться об инициализации и разрушении вещей. Я буду продолжать использовать стиль, описанный в примере 1, который мне кажется лучшим решением, даже если это будет явно более длительный процесс.