Всем привет!
Столкнулся с проблемой при написании тестов. Я хотел бы сократить количество повторяемого кода, засунув его в функцию, которая бы принимала значения.
Псевдокод теста:
var repeatTests = function(value){
it ('test1 use value', function(done){
console.log (value) // return undefined
...
}
it ('test2 use value', function(done){
console.log (value) // return undefined
...
}
...
}
describe ('test', function(){
var _value
before(function(done){
asyncFunction(function(err, value){
...
_value = value
...
done();
}
})
repeatTests(_value) // value is undefined
})
Но этот тест не сработает, потому что значение _value еще не изменено, так как изменяется оно в асинхронной функции.
Но вот такой тест сработает:
describe ('test', function(){
var _value
before(function(done){
asyncFunction(function(err, value){
...
_value = value
...
done();
}
})
it ('test1 use value', function(done){
console.log(_value); // return _value
...
}
it ('test2 use value', function(done){
console.log(_value); // return _value
...
}
...
})
Если сделать обертку из callback над it - mocha их просто не читает, а если над describe - то портятся выводы всех тестов, так как их результаты показываются после выполнения других тестов и уже нельзя понять к какому блоку тестов относятся эти тесты.
Если делать для каждого блока так, то размер кода будет увеличиваться очень сильно повторяющимся кодом.
Если сделать массив из значений, а потом использовать
array.forEach
- также не вариант, так как
repeatTests
в этом же
describe
будут другие
it
Вроде банальная задача, а как то не получается догадаться как сделать)