Mocha/Should.js с использованием асинхронной функции
Я новичок в тестовых фреймворках JavaScript. Я хотел бы сделать небольшую оптимизацию, но я столкнулся с некоторыми проблемами. Проект использует should.js
Вот упрощенная версия моих оригинальных тестовых случаев:
describe('Simple', function() {
describe('Test', function() {
it('should do something', function(done) {
somePromise.then(function(data) {
data.should.above(100);
done();
});
}
it('should do something else but alike', function(done) {
somePromise.then(function(data) {
data.should.above(100);
done();
});
}
}
});
Я пытаюсь сделать это так:
var testFunc = function(data) {
it('should do something', function(done) {
data.should.above(100);
done();
});
}
describe('Simple', function() {
describe('Test', function() {
somePromise.then(function(data) {
testFunc(data);
});
somePromise.then(function(data) {
testFunc(data);
});
}
});
Обещание асинхронное, и, возможно, именно поэтому моя "оптимизация" не сработала? Я не нашел "готово" обратного вызова для describe
функция в документах.
Заранее спасибо! Любая помощь будет признательна!
1 ответ
Ваш пример не работает, так как Mocha завершил регистрацию тестовых случаев, когда ваше обещание выполнено.
Тестирование одного и того же обещания с разными утверждениями
Чтобы протестировать одно обещание с использованием нескольких утверждений, вам просто нужно создать обещание в начале тестов, а затем использовать его в блоках it, как показано ниже:
describe('A module', function() {
var promise;
before(function () {
promise = createPromise();
});
it('should do something', function() {
return promise.then(function (value) {
value.should.be.above(100);
});
});
it('should do something else', function() {
return promise.then(function (value) {
value.should.be.below(200);
});
});
});
Обратите внимание, что если обещание возвращается из вызова API, вызов будет выполнен только один раз. Результат просто кэшируется в обещании для двух тестовых случаев.
Это также использует тот факт, что вы можете возвращать обещания из тестовых случаев вместо использования готового обратного вызова. В этом случае контрольный пример потерпит неудачу, если обещание будет отклонено или произойдет сбой любого из утверждений в вызовах then().
Тестирование разных обещаний с одинаковыми утверждениями
Предполагая, что вы хотите проверить разные обещания, используя одни и те же утверждения, вы можете передать функцию testFunc
это создает обещание быть проверенным.
var testFunc = function(promiseFactory) {
it('should do something', function(done) {
promiseFactory().then(function(data) {
data.should.above(100);
done();
});
});
}
describe('Simple', function() {
describe('Test', function() {
testFunc(function () { return createSomePromise(); });
testFunc(function () { return createSomeOtherPromise(); });
});
});
Это работает со времен мокко it
Функция запускается непосредственно внутри блока описания. Обещания затем создаются с использованием promiseFactory
обратный вызов, когда тестовые случаи действительно выполняются.
Как вы можете также вернуть обещания из тестовых случаев, вы можете изменить testFunc
чтобы вернуть утверждение как обещание:
var testFunc = function(promiseFactory) {
it('should do something', function() {
return promiseFactory().should.eventually.be.above(100);
});
}