3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

reason_mlAdvent Calendar 2017

Day 4

🚨jestでReasonのテストを書く

Last updated at Posted at 2017-12-12

過去に遡ってReason ML Advent Calendarの4日目を書く。現在に追いつける気配がない。

jestを用いてテストを書く方法について書く。

:octocat: ソースコード

(別のレポジトリを作るのが面倒だったので、今書いてる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を変更する。このときtypedevにしておくと、ライブラリとしてビルドされるときにはビルドされないようにできる。

{
  ...
  "sources": [
    { "dir": "re" },
    { "dir": "__tests__", "type": "dev" }
  ]
  ...
}

実行

ビルド後、jestコマンドでテストを実行できる。 package.json で以下のように設定する。

{
  ...
  "scripts": {
    "test": "bsb -make-world -clean-world && jest",
    ...
  },
  ...
}

Screen Shot 2017-12-12 at 21.35.26.png

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?