2017-10-23 47 views
1

私はReact(webpack)をElectronで実行しているプロジェクトに貢献しています。 Jestを使用してユニットテストを実行すると、エラーTypeError: Cannot read property 'on' of undefinedで失敗します(テストしていない場合は正常に動作します)。Electron + Jest - 単体テストでipcRendererが定義されていません

コード:

import React, { Component } from 'react'; 
import { ipcRenderer } from 'electron'; 
// some more imports 

class Setup extends Component { 
    constructor(props) { 
    super(props); 

    this.state = { 
     // some state 
    }; 

    ipcRenderer.on('open-file-reply', this.someMethod); // << fails on this line 
    } 
    // more class stuff 
} 
+0

私は、Webpackの「ターゲット」:「電子」または「ターゲット」:「電子レンダラー」を追加するなど、さまざまなソリューションを試しましたが、これらは機能しません – Technotronic

答えて

2

それは数日かかったが、最終的には、私はthis great blog postでこの答えを見つけました。引用:

JestはWebpackからテストコードを実行しません。 代わりに、インポートの代わりに をスタブファイルに置き換えるには、Jestの模擬関数を使用する必要があります。

JestにはmoduleNameMapper [object<string, string>]というヘルパメソッドがあります。冗談のドキュメントから:

単一のモジュールと画像やスタイルなどの リソースをスタブアウトすることができます名前を、モジュールへの正規表現からマップ。

それは、このようなあなたのpackage.jsonルートオブジェクトに追加する必要があります

{ 
    "name": "My awesome app", 
    "jest": { 
    "moduleNameMapper": { 
     "electron": "<rootDir>/src/components/tests/mock/electron.js" 
    } 
    } 
} 

とモックファイル自体(/src/components/tests/mock/electron.js):

このようにして、他の電子モジュールやメソッドをスタブすることができます(上記のブログに示されているリモートのようなものです)。

関連する問題