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」でした・・。