Spec-Zone.ru › Chai

Стили утверждений

В этом разделе руководства вы познакомитесь с тремя различными стилями утверждений, которые можно использовать в вашей тестовой среде. После выбора стиля рекомендуется ознакомиться с документацией API выбранного стиля.

Assert

Просмотреть полный API Assert

Стиль assert доступен через интерфейс assert. Он предоставляет классическую нотацию утверждений с точкой, аналогичную той, что поставляется с node.js. Однако этот модуль assert предоставляет несколько дополнительных тестов и совместим с браузерами.

var assert = require('chai').assert
  , foo = 'bar'
  , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');

Во всех случаях стиль assert позволяет включить необязательное сообщение в качестве последнего параметра в инструкции assert. Эти сообщения будут включены в сообщения об ошибках, если ваше утверждение не пройдёт.

BDD

Просмотреть полный API BDD

Стиль BDD представлен в двух вариантах: expect и should. Оба используют одинаковый цепной язык для построения утверждений, но различаются по способу первоначального построения утверждения. В случае should, также есть некоторые замечания и дополнительные инструменты для преодоления этих замечаний.

Expect

Стиль BDD доступен через интерфейсы expect или should. В обоих случаях вы цепляете вместе утверждения естественного языка.

var expect = require('chai').expect
  , foo = 'bar'
  , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);

Expect также позволяет включать произвольные сообщения для добавления в любые сообщения об ошибках, которые могут возникнуть.

var answer = 43;

// AssertionError: expected 43 to equal 42.
expect(answer).to.equal(42);

// AssertionError: topic [answer]: expected 43 to equal 42.
expect(answer, 'topic [answer]').to.equal(42);

Это бывает полезно при работе с такими неявными темами, как булевы значения или числа.

Should

Стиль should позволяет использовать те же цепные утверждения, что и интерфейс expect, но расширяет каждый объект свойством should, чтобы начать цепочку. Этот стиль имеет некоторые проблемы при использовании с Internet Explorer, поэтому следует учитывать совместимость с браузерами.

var should = require('chai').should() //actually call the function
  , foo = 'bar'
  , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);

Отличия

Прежде всего, обратите внимание, что expect требует только ссылку на функцию expect, тогда как should требует выполнения функции.

var chai = require('chai')
  , expect = chai.expect
  , should = chai.should();

Интерфейс expect предоставляет функцию в качестве отправной точки для цепочки утверждений языка. Он работает в node.js и во всех браузерах.

Интерфейс should расширяет Object.prototype, чтобы предоставить единственный getter в качестве отправной точки для цепочки утверждений языка. Он работает в node.js и во всех современных браузерах, кроме Internet Explorer.

Дополнительные возможности Should

Поскольку should работает путём расширения Object.prototype, есть некоторые ситуации, когда should не сработает. В основном, если вы пытаетесь проверить существование объекта. Рассмотрим следующий псевдокод:

db.get(1234, function (err, doc) {
  // we expect error to not exist
  // we expect doc to exist and be an object
});

Поскольку err должно быть null или undefined, err.should.not.exist не является корректным утверждением, так как undefined и null не были расширены началом цепочки should. Поэтому подходящие утверждения для этой ситуации таковы:

var should = require('chai').should();
db.get(1234, function (err, doc) {
  should.not.exist(err);
  should.exist(doc);
  doc.should.be.an('object');
});

При условии, что вы присвоили should переменной, у вас есть доступ к нескольким быстрым помощникам, чтобы избежать проблем при использовании should.

  • should.exist
  • should.not.exist
  • should.equal
  • should.not.equal
  • should.Throw
  • should.not.Throw

Использование Should в ES2015

Невозможно зацепить вызов функции из инструкции ES2015 import – он должен выполняться на отдельной строке, что выглядит немного громоздко:

import chai from 'chai';
chai.should();

Для более чистого вида можно сделать так:

import 'chai/register-should';

Настройка

config.includeStack

  • @param {Boolean}
  • @default false

Настраиваемое свойство, влияющее на включение трассировки стека в сообщение об ошибке утверждения. Значение по умолчанию false подавляет трассировку стека в сообщении об ошибке.

chai.config.includeStack = true; // turn on stack trace

config.showDiff

  • @param {Boolean}
  • @default true

Настраиваемое свойство, влияющее на включение флага showDiff в исключения AssertionErrors. false всегда false; true будет true, когда утверждение запросило отображение различий.

chai.config.showDiff = false; // turn off reporter diff display

config.truncateThreshold

  • @param {Number}
  • @default 40

Настраиваемое свойство, устанавливающее пороговое значение длины для фактических и ожидаемых значений в сообщениях об ошибках утверждений. Если этот порог превышен, значение усекается.

Установите его в ноль, если хотите полностью отключить усечение.

chai.config.truncateThreshold = 0; // disable truncating

© 2017 Chai.js Assertion Library
Licensed under the MIT License.
https://www.chaijs.com/guide/styles/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API