bs-jest - BuckleScript bindings for Jest
Very very experimental (yep, that's one less "very" than before! Progress!) and WIP
- Global: Fully implemented and tested, apart from
require.*
- Expect: Mostly implemented. Functionality that makes sense only for JS interop have been moved to
ExpectJS
. Some functionality does not make sense in a typed language, or is not possible to implement sensibly in ML. - Mock Functions: Experimental and unsafe implementation, very much in flux. The Jest bindings will most likely be relegated to the
MockJs
module as it's very quirky to use with native code. A separate native from-scratch implementation might suddenly appear asMock
. - The Jest Object: Fake timers are fully implemented and tested. Mock functionality has been moved to
JestJs
. It's mostly implemented, but experimental and largely untested. - [Snapshotting] Completely untested. Expect functions exist, but there's currently no way to implement custom snapshot serializers.
(* OCaml *)
open Jest
let _ =
describe "Expect" (fun () ->
let open Expect in
test "toBe" (fun () ->
expect (1 + 2) |> toBe 3);
);
describe "Expect.Operators" (fun () ->
let open Expect in
let open! Expect.Operators in
test "==" (fun () ->
expect (1 + 2) == 3);
);
/* Reason */
open Jest;
let _ =
describe "Expect" (fun () => {
open Expect;
test "toBe" (fun () =>
expect (1 + 2) |> toBe 3)
});
describe "Expect.Operators" (fun () => {
open Expect;
open! Expect.Operators;
test "==" (fun () =>
expect (1 + 2) === 3)
});
See the tests for more examples.
npm install --save-dev bs-jest
Then add bs-jest
to bs-dev-dependencies
in your bsconfig.json
:
{
...
"bs-dev-dependencies": ["bs-jest"]
}
Then add __tests__
to sources
in your bsconfig.json
:
"sources": [
{
"dir": "src"
},
{
"dir": "__tests__",
"type": "dev"
}
]
Put tests in a __tests__
directory and use the suffix *test.ml
/*test.re
(Make sure to use valid module names. e.g. <name>_test.re
is valid while <name>.test.re
is not). When compiled they will be put in a __tests__
directory under lib
, with a *test.js
suffix, ready to be picked up when you run jest
. If you're not already familiar with Jest, see the Jest documentation.
git clone https://github.com/reasonml-community/bs-jest.git
cd bs-jest
npm install
Then build and run tests with npm test
, start watchers for bsb
and jest
with npm run watch:bsb
and npm run watch:jest
respectively. Install screen
to be able to use npm run watch:screen
to run both watchers in a single terminal window.