electron-json-storage、electron-storeを使ったElectronアプリのテストの話

経緯とか

Electronでよく使われる(?)設定ファイル読込系ライブラリに

がある。

これらのライブラリは"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);
}

// 設定ファイルを使ったテスト

electron-json-storage 4.0

electron-json-storageの4.0では、setDefaultDataPath()が追加され、
設定ファイルの置き場所を変更できるようになった。

electron-storeの方は相変わらず"userData"を読み書きしに行くから、上のコードはそのまま利用中なのですけれど。