Выполнить асинхронный код перед полным тестом mocha
Я ищу способ запуска асинхронного кода перед всем тестом мокко.
Вот пример теста, который использует массив аргументов и ожиданий и циклически обрабатывает все элементы в этом массиве для получения утверждений функций.
var assert = require('assert')
/* global describe, it*/
var fn = function (value) {
return value + ' ' + 'pancake'
}
var tests = [
{
'arg': 'kitty',
'expect': 'kitty pancake'
},
{
'arg': 'doggy',
'expect': 'doggy pancake'
},
]
describe('example', function () {
tests.forEach(function (test) {
it('should return ' + test.expect, function (){
var value = fn(test.arg)
assert.equal(value, test.expect)
})
})
})
Теперь мой вопрос заключается в том, как бы это работало, если бы значения тестов исходили из обещания, например:
var assert = require('assert')
var Promise = require('bluebird')
/* global describe, it*/
var fn = function (value) {
return value + ' ' + 'pancake'
}
function getTests () {
return Promise.resolve('kitty pancake')
.delay(500)
.then(function (value) {
return [
{
'arg': 'kitty',
'expect': value
},
{
'arg': 'doggy',
'expect': 'doggy pancake'
}
]
})
}
getTests().then(function (tests) {
describe('example', function () {
tests.forEach(function (test) {
it('should return ' + test.expect, function (){
var value = fn(test.arg)
assert.equal(value, test.expect)
})
})
})
})
также попробовал:
describe('example', function () {
getTests().then(function (tests) {
tests.forEach(function (test) {
it('should return ' + test.expect, function (){
var value = fn(test.arg)
assert.equal(value, test.expect)
})
})
})
})
Однако в этом примере ни один из тестов не выполняется, потому что mocha не распознает оператор description, потому что он находится внутри обещания.
before
/ beforeEach
не будет делать ничего, чтобы помочь с тестом в формате, если толькоbeforeTest
ловушка, которая дала бы mocha знание о том, что есть асинхронная операция, которую нужно выполнить перед всем тестом.