Chai.js斷言庫API中文文檔
基于chai.js官方API文檔翻譯。僅列出BDD風格的expect/should API。TDD風格的Assert API由于不打算使用,暫時不放,后續可能會更新。
BDD
expect和should是BDD風格的,二者使用相同的鏈式語言來組織斷言,但不同在于他們初始化斷言的方式:expect使用構造函數來創建斷言對象實例,而should通過為Object.prototype新增方法來實現斷言(所以should不支持IE);expect直接指向chai.expect,而should則是chai.should()。
個人比較建議使用expect,should不僅不兼容IE,在某些情況下還需要改變斷言方式來填坑。詳細的比較可以看看官網Assertion Styles,說的很清楚。
var chai = require('chai') , expect = chai.expect , should = chai.should()語言鏈
下面的接口是單純作為語言鏈提供以期提高斷言的可讀性。除非被插件改寫否則它們一般不提供測試功能。
.not
對之后的斷言取反
expect(foo).to.not.equal('bar')expect(goodFn).to.not.throw(Error)expect({ foo: 'baz'}).to.have.property('foo') .and.not.equal('bar').deep
設置deep標記,然后使用equal和property斷言。該標記可以讓其后的斷言不是比較對象本身,而是遞歸比較對象的鍵值對
expect(foo).to.deep.equal({ bar: 'baz'})expect({ foo: { bar: { baz: 'quux'}}}) .to.have.deep.property('foo.bar.baz', 'quux')deep.property中的特殊符號可以使用雙反斜杠進行轉義(第一個反斜杠是在字符串參數中對第二個反斜杠進行轉義,第二個反斜杠用于在property中進行轉義)
var deepCss = { '.link': { '[target]': 42 } }expect(deepCss).to.have.deep.property('//.link.//[target//]', 42).any
在keys斷言之前使用any標記(與all相反)
expect(foo).to.have.any.keys('bar', 'baz').all
在keys斷言之前使用all標記(與any相反)
expect(foo).to.have.all.keys('bar', 'baz').a(type) / .an(type)
type:String,被測試的值的類型
a和an斷言即可作為語言鏈又可作為斷言使用
// 類型斷言expect('test').to.be.a('string');expect({ foo: 'bar' }).to.be.an('object');expect(null).to.be.a('null');expect(undefined).to.be.an('undefined');expect(new Error).to.be.an('error');expect(new Promise).to.be.a('promise');expect(new Float32Array()).to.be.a('float32array');expect(Symbol()).to.be.a('symbol');// es6 overridesexpect({[Symbol.toStringTag]:()=>'foo'}).to.be.a('foo');// language chainexpect(foo).to.be.an.instanceof(Foo);.include(value) / contains(value)
value:Object | String | Number
include()和contains()即可作為屬性類斷言前綴語言鏈又可作為作為判斷數組、字符串是否包含某值的斷言使用。當作為語言鏈使用時,常用于key()斷言之前
新聞熱點
疑難解答
圖片精選