Build Status Coverage Status

maybe-chai

Chai 插件用于 Maybe 单子。适用于任何单子库。

安装

npm install maybe-chai --save-dev
// Before all the tests (use --require in mocha)
import chai from 'chai'
import maybeChai from 'maybe-chai'

chai.use( maybeChai() )

适配到你的 Maybe 库

Maybe-chai 默认情况下开箱即用,适用于 true-myth 库。如果你想使用其他库,你需要传递一个适配器(我们有 预先准备好的适配器)。

可以通过将一个对象传递给 maybeChai() 来配置一个适配器,该对象遵循以下签名

maybeChai( {
    match: (maybe: Maybe<T>, cases: MatchCases<T, U>) => U,
    isMaybe: (maybe: Maybe<T>) => Boolean,
} )

type MatchCases<T, U> = {
    Just: (value: T) => U,
    Nothing: () => U,
}

类型不会严格执行,但你应该检查你的测试是否正常工作。

然而,这个库的目标是为每个流行的单子库提供一个适配器。

你可以 在这里查看适配器列表

用法

just

断言目标是 Maybe.Just 的实例,使用提供的 match 函数。

expect( Maybe.just(5) ).to.be.a.just()      // OK!
expect( Maybe.just(5) ).to.be.just(5)       // OK!
expect( Maybe.nothing() ).to.be.just(5)     // fails
expect( Maybe.nothing() ).to.not.be.just(5) // OK!
expect( 'string' ).to.be.just(5)            // fails
expect( 'string' ).to.not.be.just(5)        // OK!

.just 也会对单子的内容进行深度比较。

expect( Maybe.just({a: 'test'}) ).to.be.just({a: 'test'})

此外,.just 会将链中任何后续断言的目标更改为原始 Just 对象内部的值。

expect( Maybe.just( { status: 200 } ) ).to.be.a.just()
    .and.to.have.property( 'status', 200 ) // OK

nothing

断言目标是 Maybe.Nothing 的实例,使用提供的 match 函数。

expect( Maybe.nothing() ).to.be.nothing()   // OK!
expect( Maybe.just(5) ).to.be.nothing()     // fails
expect( Maybe.just(5) ).to.not.be.nothing() // OK!
expect( 'string' ).to.be.nothing()          // fails
expect( 'string' ).to.not.be.nothing()      // OK!

支持的库

虽然该库允许你为任何库提供适配器,但它的目标是为 Javascript 中每个流行的单子库提供一个食谱 在这里

  • True Myth
  • Sanctuary
  • TSMonad
  • Folktale
  • Monet
  • Funfix
  • Crocks
  • KudoJS
  • Purify

如果你的库不在此列表中,欢迎你提出请求,并感谢你的 PR!