Chai - A BDD / TDD assertion library for node

Chai 是 Node.js 的 BDD / TDD 斷言套件。


使用前先從 Registry 下載套件。

npm install chai --save-dev


Chai 有三種撰寫風格,should、expect、assert,assert 是比較偏向傳統的斷言方式,expect 與 should 則是偏向 BDD style 的斷言方式。


無論哪個撰寫風格在撰寫前都需引用 Chai 套件。

1
const chai = require('chai');


should 撰寫風格使用上要先告知 Chai 套件使用 should 撰寫風格。

1
chai.should();


接著用目標值應該是…、目標值應該等於…、目標值應該有…類似這樣的寫法撰寫斷言。

1
2
3
4
5
...
target.should.be.a(type);
target.should.eaequal(value);
target.should.have.lengthOf(length);
...


程式寫起來會像下面這樣:

1
2
3
4
5
6
7
8
const chai = require('chai');
const foo = "bar";
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
chai.should();
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);


如果斷言錯誤,可以看到像下面這樣斷言錯誤的訊息。


expect 撰寫風格使用上要先取得 expect。

1
var expect = chai.expect;


接著用預期目標值是…、預期目標值等於…、預期目標值有…類似這樣的寫法撰寫斷言。

1
2
3
4
5
...                                                     
expect(target).to.be.a(type);
expect(target).to.eaequal(value);
expect(target).to.have.lengthOf(length);
...


程式寫起來會像下面這樣:

1
2
3
4
5
6
7
8
9
10
11
const chai = require('chai');

const foo = "bar";
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };

var expect = chai.expect;

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);


assert 撰寫風格使用上要先取得 assert。

1
var assert = chai.assert;


接著用斷言目標值型態為指定型態、斷言目標值為指定值、預期目標值長度為指定長度…類似這樣的寫法撰寫斷言。

1
2
3
4
5
...         
assert.typeOf(target, type);
assert.equal(target, value);
assert.lengthof(target, length);
...


程式寫起來會像下面這樣:

1
2
3
4
5
6
7
8
9
const chai = require('chai');
const foo = "bar";
const beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
var assert = chai.assert;
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');