console.lealog();

@leader22のWeb系に関する勉強めもブログですのだ

JestでES Moudlesなモジュールをテストしたい

import { observable } from 'mobx';

class Store {
  // ...
}

export default Store;

のような、`import / export`で書いたモジュールを、Jestでそのままテストしたい。

が、そのまま`require()`することもできないので、なんとかする必要がある。

`esm`を使う

// 各テストファイルで
const requireEsm = require('esm')(module);
const ChatStore = requireEsm('../../../src/conf/store/chat').default;

test('あとはいつもどおり', () => {
  expect(xxx);
});

一番手軽ではあるが、最初の行を全てのテストファイルでいちいち書かないといけない。
Jestの`setupFiles`で最初に・・とかしたかったけど、ダメだった。Jestの都合な感じがする。

Babelを使う

BabelでES Modulesの記法をCommonJSのそれに変換するパターン。

けど、パイプライン的な依存も増えるしなんだかなーと。

しかし

  • 普通のテスト
  • `spyOn()`での後からモック

は思ったように動いたけど、`useFakeTimers()`でのタイマーのモックができなかった・・無念。

最終的なワークアラウンドは、「Jestを捨ててKarma + Rollup」でした・・。