2014-01-28 3 views

ответ

227

Различия documented there.

Три интерфейса представляют разные стили выполнения утверждений. В конечном счете, они выполняют ту же задачу. Некоторые пользователи предпочитают один стиль над другим. Это, как говорится, есть также пара технических соображений следует выделить:

  1. утверждает, и ожидать, что интерфейсы не изменяют Object.prototype, в то время как должно делает. Таким образом, они являются лучшим выбором в среде, где вы не можете или не хотите менять Object.prototype.

  2. Интерфейсы assert и expect поддерживают пользовательские сообщения практически везде. Например:

    assert.isTrue(foo, "foo should be true"); 
    expect(foo, "foo should be true").to.be.true; 
    

    сообщения «Foo должен быть истинным» будет выводиться вместе с неисправным утверждением, если утверждение не удается. У вас нет возможности установить настраиваемое сообщение с интерфейсом should.

(Историческая справка: в течение долгого времени этот ответ заявил, что, чтобы получить специальное сообщение с expect, вы должны использовать обходной путь Aurélien Ribon сообщил мне, что передает сообщение для expect в качестве второго параметра работ. Следовательно, нет необходимости в обходном пути. Мне не удалось найти, какая версия Mocha начала предоставлять поддержку этому сообщению, и я не смог найти, какая версия документации задокументировала его в первый раз.)

Обратите внимание, что assert.isTrue(foo), expect(foo).to.be.true и foo.should.be.true все вывести следующие, если вы не используете обычай сообщение, и foo === 1:

AssertionError: expected 1 to be true 

Таким образом, хотя ожидать и должны взаимодействовать приятнее для чтения , он не похож на один интерфейс более естественно информативны, чем другой, когда утверждение не удается. Это сообщение, которое идентично для всех трех интерфейсов, не сообщает вам , что именно вы тестировали, только то, что вы получили, было 1, но вы хотели true. Если вы хотите узнать, что вы тестировали, вам нужно добавить сообщение.

+7

Отличный ответ, он должен быть выбран :) –

+2

Обратите внимание, что теперь ожидание может принимать сообщение в его конструкторе: 'ожидать (foo, 'some message'). To.be.true'. Это едва читаемо, поэтому вы часто устанавливаете сообщение в переменной. –

+1

@ AurélienRibon Merci pour l'information. Я проверил несколько тестов с некоторыми старыми версиями Mocha, и я думаю, что этот параметр сообщения был фактически восстановлен, но они не документировали его. : -/Я обновлю этот ответ. – Louis

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