過去に遡ってReason ML Advent Calendarの4日目を書く。現在に追いつける気配がない。
jestを用いてテストを書く方法について書く。
ソースコード
(別のレポジトリを作るのが面倒だったので、今書いてるReason製プロダクトの別ブランチにした)
なぜjestか
ほかのテスティングフレームワークではくjestを使うのは、ほかのフレームワークのバンディングが存在しないためです。
正確にはbs-mochaというmochaのバインディングが存在している。 しかし特にメンテされていないので利用は現実的でない。 ReasonのDiscordで聞いたたころ「あれはバンディングの書き方の例示だ。ちゃんと使うならbs-jestを使ってくれ」と言われた。
ライブラリのインストール
yarnで bs-jest
をいれる。
yarn add --dev bs-jest
bsconfig.json
に依存を追加する。
{
...
"bs-dev-dependencies": ["bs-jest"],
...
}
テストコードの追加
Jestの書き方にあわせるため、 __tests__
以下にテストコードを置く。
(*
テスト対象(counter.re):
type t = int;
let zero () = 0;
let value = n => n;
let inc = n => n + 1;
*)
open Jest;
open Expect;
open! Expect.Operators;
describe("Counter", () => {
let subject =
Counter.zero ()
|> Counter.inc;
test("value", () => expect(Counter.value(subject)) == 1)
}
);
テストコードの書き方はbs-jest同梱の例やJestのドキュメントが参考になる。
ビルド対象への追加
__tests__
をビルド対象に追加するようbsconfig.json
を変更する。このときtype
をdev
にしておくと、ライブラリとしてビルドされるときにはビルドされないようにできる。
{
...
"sources": [
{ "dir": "re" },
{ "dir": "__tests__", "type": "dev" }
]
...
}
実行
ビルド後、jest
コマンドでテストを実行できる。 package.json
で以下のように設定する。
{
...
"scripts": {
"test": "bsb -make-world -clean-world && jest",
...
},
...
}