purify-asserts
v0.3.2
Published
Jest expectations for the purify-ts library
Downloads
44
Readme
Jest expectations for the purify-ts library
Motivation
Purify is an excellent library for functional TypeScript applications, but its algebraic data types are not so obvious to test. Specifically, the following convention examples are not easy to remember in the scope of unit tests.
expect(maybe.isJust()).toBe(true);
expect(maybe.isNothing()).toBe(true);
expect(maybe.extract()).toEqual("value");
expect(either.isLeft()).toBe(false);
expect(either.isRight()).toBe(true);
expect(either.extract()).toEqual("is this success or error?");
Wouldn't it be more satisfying to assert expectations with the same domain language Purify speaks of? I think so.
expect(possiblyNullableMaybe).toBeJust();
expect(justOrNothing).toBeNothing();
expect(justOrNothing).toHaveJustValue(1);
Install
npm install --save-dev purify-asserts
yarn add --dev purify-asserts
Usage
Using matchers requires to use the expect.extend()
method of Jest. These should be imported and used at the beginning of your test suite above the first describe()
block.
Import all of the matchers:
import * as matchers from "purify-asserts";
expect.extend(matchers);
Import only selected matchers:
import { toBeJust, toBeNothing } from "purify-asserts";
expect.extend({ toBeJust, toBeNothing });
Examples
- Examples for using
Maybe<T>
matchers - Examples for using
Either<L, R>
matchers (work in progress) - Examples for using
MaybeAsync<T>
matchers (work in progress) - Examples for using
EitherAsync<L, R>
matchers (work in progress) - Examples for using
Tuple<F, S>
matchers (work in progress) - Examples for using
NonEmptyList<T>
matchers (work in progress) - Examples for using
Codec<T>
matchers (work in progress)
Author
👤 Niko Heikkilä [email protected]
- Website: https://nikoheikkila.fi
- Mastodon: @nikoheikkila
- Github: @nikoheikkila
- LinkedIn: @nikoheikkila
🤝 Contributing
Contributions, issues and feature requests are welcome!
Feel free to check issues page.
Show your support
Give a ⭐️ if this project helped you!
This README was generated with ❤️ by readme-md-generator