Chai-Kekka

一個用於 Kekka 的 Chai 外掛

安裝與使用

Node: 使用 npm install --save-dev chai-kekka 來開始使用。

const chai = require("chai")
const chaiKekka = require("chai-kekka")
 
chai.use(chaiKekka)

文件

測試值為 Type Result

result 屬性可以用來檢查被測試的值是否為 Result 類別的實例。

expect(Success('Some String')).to.be.a.result
expect(Failure(new Error('Failure...'))).to.be.a.result

測試值為 Result Success

success 屬性可以用來檢查被測試的值是否為 Result 類別中型別為 Success 的實例。

// Positive
expect(Success('Success String')).to.be.a.success // OK
expect(Failure(new Error('Failure...'))).to.be.a.success // FAIL
expect('Not a result').to.be.a.success // FAIL

// Negative
expect(Success('Success String')).not.to.be.a.success // FAIL
expect(Failure(new Error('Failure...'))).not.to.be.a.success // OK
expect('Not a result').not.to.be.a.success // FAIL with 'expected 'Not a result' to be an instance of Result'

測試值為 Result Failure

failure 屬性可以用來檢查被測試的值是否為 Result 類別中型別為 Failure 的實例。

// Positive
expect(Success('Success String')).to.be.a.failure // FAIL
expect(Failure(new Error('Failure...'))).to.be.a.failure // OK
expect('Not a result').to.be.a.failure // FAIL

// Negative
expect(Success('Success String')).not.to.be.a.failure // OK
expect(Failure(new Error('Failure...'))).not.to.be.a.failure // FAIL
expect('Not a result').not.to.be.a.failure // FAIL with 'expected 'Not a result' to be an instance of Result'

測試 Result 物件的關聯值

有兩種方式可以測試 Result 物件的關聯值

  • 方法 successWrappingfailureWrapping
  • 屬性 associatedValue

successWrappingfailureWrapping

const error = new Error('Failure message')
expect(Failure(error)).to.be.a.failureWrapping(error) // OK
expect(Failure(error)).to.be.a.successWrapping(error) // FAIL - not a Success
expect(Failure(error)).to.be.a.failureWrapping('some other value') // FAIL

expect(Success('Success String')).to.be.a.successWrapping('Success String') // OK
expect(Success('Success String')).to.be.a.failureWrapping('Success String') // Fail - not a Failure

// equality modifiers can be used, such as deep, on successWrapping and failureWrapping
expect(Success({ a: '423' })).to.be.a.deep.successWrapping({ a: '423' }) 

associatedValue

associatedValue 屬性可以在 resultsuccessfailure 屬性之後使用。它會將鏈中後續任何斷言的目標更改為結果的關聯值。

expect(Success('Success String')).to.be.a.success
  .with.associatedValue.that.equals('Success String') // OK
expect(Success({ a: '423' })).to.be.a.success
  .with.associatedValue.that.deep.equals({ a: '423' }) // OK - equality modifiers accepted
expect(Success({ a: '423' })).to.be.a.failure
  .with.associatedValue.that.deep.equals({ a: '423' }) // FAIL - not a failure
expect(Success({ a: '423' })).to.be.a.result
  .with.associatedValue.that.deep.equals({ a: '423' }) // OK
expect(Success('Success String')).to.have.associatedValue.that.equals('Success String') // FAILS 
// associatedValue must be after either a result, success or failure assertion property