Я работаю над пользовательской библиотекой утверждений Javascript, в первую очередь для использования в тестовых бегунах, таких как Mocha.
Библиотека отлично работает, когда тест терпит неудачу, бросая ошибку. Тем не менее, я не могу понять, как заставить библиотеку "пройти", когда нет ошибки для броска.
Я пробовал читать через источник других библиотек, таких как "Долг" и "Чай", но не смог найти этот аспект.
Вот моя утверждающая библиотека, my-assert-lib.js
:
module.exports = function(input){
var methods = {
compare: function(comparison){
if(input != comparison){
throw new Error("The comparison string didn't match")
}
else{
return
}
}
}
return methods
}
Вот мой test.js
, который я исполняю с помощью Mocha:
var myAssertLib = require("./my-assert-lib.js")("correct");
describe("The comparison string", function(){
it('should match the library input', function(doc) {
myAssertLib.compare("incorrect")
});
it('should match the library input', function(doc) {
myAssertLib.compare("correct")
});
})
Я получаю следующие результаты:
0 passing (2s)
2 failing
1) The comparison string
should match the library input:
Error: The comparison string didn't match
at Object.compare (my-assert-lib.js:5:23)
at Context.<anonymous> (test.js:10:21)
2) The comparison string
should match the library input:
Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.
Первый тест немедленно завершается, как и следовало ожидать. Однако второй тест истекает. Что должен делать my-assert-lib.js
, когда нечего бросать, и тестовый бегун должен продолжаться?
Я не могу сказать, почему, но мокко ожидает, что вы вызовете done
функцию.
Ошибка: превышено время ожидания 2000 мс. Для асинхронных тестов и перехватчиков убедитесь, что вызывается "done()"; если вы возвращаете обещание, убедитесь, что оно разрешено.
Выполнение этого дает один проход, а один - неудачу, как и ожидалось.
describe("The comparison string", function(){
it('should match the library input', function(done) {
myAssertLib.compare("incorrect")
done()
})
it('should match the library input', function(done) {
myAssertLib.compare("correct")
done()
})
})
> The comparison string
> 1) should match the library input
> ✓ should match the library input
>
>
> 1 passing (14ms) 1 failing
>
> 1) The comparison string
> should match the library input:
> Error: The comparison string didn't match
> at Object.compare (assertLib.js:7:23)
> at Context.<anonymous> (test.js:7:21)