electron-json-storage、electron-storeを使ったElectronアプリのテストの話
経緯とか
Electronでよく使われる(?)設定ファイル読込系ライブラリに
- electron-json-storage (https://github.com/electron-userland/electron-json-storage)
- electron-store (旧 electron-config) (https://github.com/sindresorhus/electron-store)
がある。
これらのライブラリは"userData"に設定ファイルを置くけれど、
設定ファイルの位置を変更する機能がないので、
単体テストを実行したら、
"userData"に置いていた私が丹精込めて育てた設定ファイルが上書きされちゃったことがある。
// Macならこの位置になる $HOME/Library/Application Support/$app_name/
どのように対応する?
調べたら、例えば、このように対応したら良いらしい。
https://github.com/electron/spectron/issues/202
Spectronでapp.start()後に、アプリ側でuserDataを変更する。
これで私の設定ファイルは守護られたのだ…
// テストコード(抜粋) // mainSpec.ts import {Application} from 'spectron'; import * as assert from 'assert'; import * as temp from 'temp'; temp.track(); describe('window-main', function() { this.timeout(10000); beforeEach(function() { const fsprefix = `_ollfrow_${Date.now().toString(36)}`; const dirPath = temp.mkdirSync(fsprefix); this.app = new Application({ path: 'ollfrow-darwin-x64/ollfrow.app/Contents/MacOS/ollfrow', env: {NODE_ENV: 'test', userData: dirPath}, }); return this.app.start(); }); (略)
// electron.ts テストされるコード // テスト時はuserDataを差し替える if (process.env.NODE_ENV == 'test' && process.env.userData) { app.setPath('userData', process.env.userData); } // 設定ファイルを使ったテスト