Чай, мокко: определить следует утверждение
Я использую mocha
а также chai
как утверждения.
У меня есть несколько утверждений в моей спецификации:
Exp1.should.be.true
Exp2.should.be.true
Exp3.should.be.true
Если один из них терпит неудачу, Мокко пишет: "Ожидается, что ложь будет правдой". Есть ли способ их идентифицировать?
С expect
Я могу сделать это:
expect(Exp1, 'Exp1').to.be true
Возможно ли что-то подобное с should
?
3 ответа
По-видимому should
не поддерживает пользовательские сообщения об ошибках в данный момент.
Вы можете создать свой собственный помощник для установки сообщения:
var chai = require('chai'),
should = chai.should();
// Helper definition - should be in a shared file
chai.use(function(_chai, utils) {
_chai.Assertion.addMethod('withMessage', function(msg) {
utils.flag(this, 'message', msg);
});
});
// Sample usage
it('should fail', function() {
var Exp1 = false;
var Exp2 = false;
Exp1.should.be.withMessage('Exp1').true;
Exp1.should.withMessage('Exp2').be.true;
});
Я проверил код chai по отношению к must и обнаружил, что принятый в настоящее время ответ является неправильным или неполным.
Если вы прочитаете там, вы обнаружите, что действительно есть способ включить ваше собственное сообщение в каждое утверждение. Суть в том, что вам может потребоваться изменить синтаксисы утверждений для использования should
вместо вызова функции.
(1).should.equal(0, 'This should fail');
/****** Output with (I believe) default reporter *****
* This should fail
* + expected - actual
*
* -1
* +0
*/
Обратите внимание, что ваш вывод может выглядеть иначе, если вы используете свой собственный репортер. Если вы чувствуете себя таким склонным, вы могли бы обернуть should
функции всегда включать номер строки в выводе вашего утверждения.
Интересно, почему они просто не добавляют, какая строка опровергла утверждение, но я сам столкнулся с этой же проблемой. У коллеги, который может лучше руководств, чем я заметил, есть настройки для includeStack
который даст номера строк для утверждений. http://chaijs.com/guide/styles/
Так как я делаю много асинхронных, я могу запустить свои тесты в before
или же beforeEach
а затем запустить отдельный it
за каждое утверждение.