Чай, мокко: определить следует утверждение

Я использую 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 за каждое утверждение.

Другие вопросы по тегам