Chai plugin for Maybe monads. Adaptable to any monad library.
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-chai, as a default, works out of the box for true-myth
library because reasons.
If you want to use another library, you will need to pass it an adapter (we have pre-cooked adapters)
You can configure an adapter by passing an object to maybeChai()
that follows this signature:
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,
}
Types will not be strictly enforced, but you should check your tests work properly.
However, the aim of this library is to provide an adapter for each of the most popular Monad libraries out there.
You can check the list of adapters here.
Asserts that the target is an instance of Maybe.Just by using provided match
function.
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
also deep equals the contents of the monad.
expect( Maybe.just({a: 'test'}) ).to.be.just({a: 'test'})
Moreover, .just
changes the target of any assertions that follow in the chain to be the value inside the original Just object.
expect( Maybe.just( { status: 200 } ) ).to.be.a.just()
.and.to.have.property( 'status', 200 ) // OK
Asserts that the target is an instance of Maybe.Nothing by using provided match
function.
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!
Although the library allows you to provide an adapter to any library, the aim of the library is to provide a recipe here for each of the most popular monad libraries in Javascript:
- True Myth
- Sanctuary
- TSMonad
- Folktale
- Monet
- Funfix
- Crocks
- KudoJS
- Purify
If yours is not here, you are welcome to issue a request, and PRs will be appreciated!