Build Status Coverage Status

maybe-chai

Maybe Monad 的 Chai 外掛。可適用於任何 Monad 函式庫。

安裝

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,
}

類型不會被嚴格強制執行,但您應該檢查您的測試是否正常運作。

然而,此函式庫的目標是為市面上最受歡迎的 Monad 函式庫提供轉接器。

您可以在這裡查看轉接器列表

用法

just

透過使用提供的 match 函數,斷言目標是 Maybe.Just 的實例。

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 也會深度比較 monad 的內容。

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

透過使用提供的 match 函數,斷言目標是 Maybe.Nothing 的實例。

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 中最受歡迎的 monad 函式庫的每一個提供一個配方

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

如果您的函式庫沒有在這裡,歡迎您提出請求,並且我們將感謝 PR!