ちょっと面倒だったのでメモ
サンプル
TypeScriptをdistにコンパイルして、.jsファイルでテストを実行する場合でサンプルを書きますが、
別のパターンでも簡単に応用できると思います。
ファイル構造は以下の想定
src/
├─ index.ts
├─ index.test.ts // テスト
└─ index.test.snap <= ここにスナップショットを出力したい
dist/
└─ src/
├─ index.js
└─ index.test.js
実行コマンドの想定
jest dist/src/index.test.js
実装
jest.config.js
module.exports = {
...
snapshotResolver: './src/snapshotResolver.js',
};
src/snapshotResolver.js
module.exports = {
/**
* テストファイルのパス => スナップショットのファイルパスに変換
* dist/src/index.test.js
* => src/index.test.snap
*/
resolveSnapshotPath: ( testPath, snapshotExtension ) =>
testPath.replace( 'dist/', '' ).replace( '.js', '' ) + snapshotExtension,
/**
* スナップショットのファイルパス => テストのファイルパスの変換
* src/index.test.snap
* => dist/src/test/create.test.js
*/
resolveTestPath: ( snapshotFilePath, snapshotExtension ) =>
snapshotFilePath
.replace( 'src/', 'dist/src/' )
.slice( 0, -snapshotExtension.length ) + '.js',
/**
* 整合性の確認のためのサンプルが必須のようです
*/
testPathForConsistencyCheck: 'dist/src/example.test.js',
};
以上!