2017-10-23 1 views
1

Ich trage zu einem Projekt bei, das mit React (mit Webpack) in Electron erstellt wurde. Bei der Ausführung Komponententests mit Jest schlägt es mit dem Fehler TypeError: Cannot read property 'on' of undefined fehl (und funktioniert gut, wenn nicht getestet, z. B. mit Electron ausgeführt).Electron + Jest - ipcRenderer ist in Komponententests nicht definiert

Der Code:

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

Ich habe viele verschiedene Lösungen ausprobiert, einschließlich des Hinzufügens von Webpacks "Ziel": "Elektron" oder "Ziel": "Elektronenrenderer", aber keiner davon hat funktioniert – Technotronic

Antwort

2

Es dauerte ein paar Tage, aber schließlich fand ich diese Antwort in this great blog post. Quote:

Jest wird von Node aufgerufen und führt Testcode nicht über Webpack aus. Stattdessen müssen wir die Mock-Funktionen von Jest verwenden, um den Import durch eine Stub-Datei zu ersetzen.

Jest hat eine Hilfsmethode namens moduleNameMapper [object<string, string>]. Von Scherz Dokumentation:

Eine Karte von regulären Ausdrücken Namen Modul, das Ressourcen Stub erlauben, wie Bilder oder Stilen mit einem einzigen Modul.

Es sollte so in Ihrem package.json Wurzelobjekt hinzugefügt werden:

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

und die Mock-Datei selbst (/src/components/tests/mock/electron.js):

Auf diese Weise können Sie andere Elektronenmodule und Methoden stubben (wie Remote, die im obigen Blog gezeigt wird).

Verwandte Themen