В чем разница между assert
, expect
и should
, и когда использовать то , что?
assert.equal(3, '3', '== coerces values to strings');
var foo = 'bar';
expect(foo).to.equal('bar');
foo.should.equal('bar');
источник
В чем разница между assert
, expect
и should
, и когда использовать то , что?
assert.equal(3, '3', '== coerces values to strings');
var foo = 'bar';
expect(foo).to.equal('bar');
foo.should.equal('bar');
Различия документированы там .
Три интерфейса представляют разные стили выполнения утверждений. В конечном итоге они выполняют одну и ту же задачу. Некоторые пользователи предпочитают один стиль другому. При этом следует также отметить пару технических соображений:
Интерфейсы Assert и Expect не меняются Object.prototype
, тогда как должны. Таким образом, они являются лучшим выбором в среде, где вы не можете или не хотите меняться Object.prototype
.
Интерфейсы assert и Ожидают поддерживают пользовательские сообщения почти везде. Например:
assert.isTrue(foo, "foo should be true");
expect(foo, "foo should be true").to.be.true;
Сообщение "foo должно быть истиной" будет выведено вместе с ошибочным утверждением, если утверждение не выполнено. У вас нет возможности установить пользовательское сообщение с интерфейсом must.
(Историческая справка: долгое время в этом ответе говорилось, что для получения настраиваемого сообщения expect
вам придется использовать обходной путь. Орелиан Рибон сообщил мне, что передача сообщения expect
в качестве второго параметра работает. Следовательно, в этом нет необходимости. Обходной путь. Я не смог найти, какая версия Mocha начала поддерживать это сообщение, и я не смог найти, какая версия документации документировала его впервые.)
Обратите внимание , что assert.isTrue(foo)
, expect(foo).to.be.true
и foo.should.be.true
все выходные следующее , если вы не используете пользовательское сообщение, и foo === 1
:
AssertionError: expected 1 to be true
Таким образом, хотя интерфейс «ожидаемо» и «должен» читаться лучше , это не значит, что один интерфейс более информативен, чем другой, когда утверждение не выполнено. Это сообщение, идентичное для всех трех интерфейсов, не говорит вам о том , что именно вы тестировали, только о том, что полученное вами значение было, 1
но вы хотели true
. Если вы хотите узнать, что вы тестировали, вам нужно добавить сообщение.
expect(foo).to.equal(true, "foo should be true");
expect
, используя последнюю версию моккоmocha
и получении тестового сбоя.Я надеюсь, что эти простые примеры проясняют их различия
Утверждай
Во всех случаях стиль assert позволяет вам включить необязательное сообщение в качестве последнего параметра в операторе assert. Они будут включены в сообщения об ошибках, если ваше утверждение не пройдет.
Заметьте, что ожидайте и должны использовать цепочечный язык для построения утверждений, но они отличаются в том, как изначально создается утверждение. В случае необходимости, есть также некоторые предостережения и дополнительные инструменты для преодоления предостережений.
ожидать
Expect позволяет вам включать произвольные сообщения перед любыми ошибочными утверждениями, которые могут возникнуть.
Это удобно, когда используется с неописанными темами, такими как логические значения или числа.
Должен
Стиль should допускает те же цепочки утверждений, что и ожидаемый интерфейс, однако он расширяет каждый объект свойством must для запуска цепочки. Этот стиль имеет некоторые проблемы при использовании с Internet Explorer, поэтому следует помнить о совместимости браузера.
Различия между ожидаемым и необходимым
Прежде всего, обратите внимание, что ожидаемый запрос - это просто ссылка на функцию ожидаемого, тогда как с обязательным требованием функция выполняется.
Ожидать интерфейс обеспечивает функцию в качестве отправной точки для сцепления языка утверждения. Работает на node.js и во всех браузерах.
Должен интерфейс расширяет Object.prototype обеспечить единый поглотитель в качестве отправной точки для вашего языка утверждений. Он работает на node.js и во всех современных браузерах, кроме Internet Explorer.
источник