Как моя библиотека JavaScript assert может вернуть пропуск?

1

Я работаю над пользовательской библиотекой утверждений 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, когда нечего бросать, и тестовый бегун должен продолжаться?

  • 0
    Есть ли какая-то причина, по которой вы не используете встроенный метод assert? nodejs.org/api/assert.html#
  • 0
    Вы имеете в виду использование встроенного метода assert непосредственно в моих тестах или в моей библиотеке? Я создаю свою собственную библиотеку, потому что у меня есть довольно специфические потребности, которые, кажется, не покрываются общедоступными библиотеками. Я удалил все эти специальные кусочки из вопроса, так как не думаю, что они здесь актуальны. Если вы предлагаете использовать встроенный assert в моей библиотеке, не могли бы вы предоставить пример кода?
Теги:
unit-testing
mocha
assert

1 ответ

0
Лучший ответ

Я не могу сказать, почему, но мокко ожидает, что вы вызовете 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)
  • 0
    Ах! Похоже, я случайно передал аргумент тестовой функции, которая интерпретировалась как обратный вызов - который я никогда не вызывал. Удаление это решило проблему. Спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню