2015-12-17 4 views
2

Я пытаюсь написать утверждения, которые проверяют сообщения об ошибках в nodeunit. Я хочу, чтобы тест завершился с ошибкой, если сообщение об ошибке не соответствует ожидаемому. Однако для API это не похоже. Вот то, что я пытаюсь сделать:Как утверждать об ошибке в nodeunit?

foo.js

function foo() { 
    ... 
    throw new MyError('Some complex message'); 
} 

foo.test.js

testFoo(test) { 
    test.throws(foo, MyError, 'Some complex message'); 
} 

Я хотел бы testFoo потерпеть неудачу, если сообщение об ошибке не ' Некоторое сложное сообщение ", но это не так, как это работает. Похоже, что «Некоторое сложное сообщение» - это просто сообщение, объясняющее потерю теста. Это утверждение не связано с утверждением. Каков наилучший способ сделать это в nodeunit?

ответ

2

Следующий способ nodeunit API

throws(block, [error], [message]) - Expects block to throw an error. 

может принимать функцию для параметра [ошибки]. Функция принимает аргумент actual и возвращает true|false, чтобы указать на успех или неудачу утверждения.

Таким образом, если вы хотите, чтобы утверждать, что какой-либо метод бросает Error и что ошибка содержит некоторое конкретное сообщение, вы должны написать тест, как это:

test.throws(foo, function(err) { 
    return (err instanceof Error) && /message to validate/.test(err) 
    }, 'assertion message'); 

Пример:

function MyError(msg) { 
    this.message = msg; 
} 
MyError.prototype = Error.prototype; 

function foo() { 
    throw new MyError('message to validate'); 
} 

exports.testFooOk = function(test) { 
    test.throws(foo, function(actual) { 
    return (actual instanceof MyError) && /message to validate/.test(actual) 
    }, 'Assertion message'); 
    test.done(); 
}; 

exports.testFooFail = function(test) { 
    test.throws(foo, function(actual) { 
    return (actual instanceof MyError) && /another message/.test(actual) 
    }, 'Assertion message'); 
    test.done(); 
}; 

Выход:

✔ testFooOk 
✖ testFooFail 

Фактически любая испытательная рама, lements от модуля node.js assert, поддерживаем это. Например: node.js assert или Should.js

+1

Спасибо. Это не упоминается в nodeunit api. После проверки кода я также вижу, что '[error]' может быть регулярным выражением. Это регулярное выражение применяется к сообщению об ошибке. Соответствие указывает на успех. Но ваше предложение лучше, так как оно позволяет мне проверять оба одновременно. –

 Смежные вопросы

  • Нет связанных вопросов^_^