2016-04-07 2 views
13

Gegenwärtig benötigt Reactive Native dynamisch eine Datei für die laufende Plattform mit einer bestimmten Dateierweiterung, *.ios.js oder *.android.js. Wenn jedoch diesen Code innerhalb einer Testumgebung ausgeführt wird, erhalten wir einen require Fehler, da das Modul require('./module') nicht im Dateibaum gefunden werden, die wie folgt aussieht:Testplattform-spezifischer Erweiterungscode für React Native

  • module.ios.js
  • module.android.js

Wie Können wir diese Probleme in einer Testumgebung behandeln?

Antwort

0

Es ist irgendwie hässlich und vielleicht gibt es eine bessere Lösung, aber es scheint, dass Sie eine module.js Datei erstellen können, die in den Tests verwendet werden, aber in Plattform-Umgebung noch die module.ios.js oder module.android.js verwenden.

1

Ab Jest 17.0.0 können Sie die defaultPlatform Konfiguration für diesen Einsatz - die ganz unten auf der Jest Mutter tutorial Reagieren sehen.

Wie es zeigt, würden Sie so etwas wie dieses konfigurieren:

"haste": { 
    "defaultPlatform": "ios", 
    "platforms": ["android", "ios"], 
}, 

Natürlich bedeutet dies, Ihre Tests nur die iOS-Version Ihrer Komponente geladen werden (oder nur Android, je nachdem, wie Sie wählen, um es zu konfigurieren).

Wenn Sie es finden wichtig, beide Versionen zu testen, müssen Sie wahrscheinlich etwas mehr wie die Lösung in this Ausgabe erwähnt tun, möglicherweise Platform.OS und mit require.requireActual direkt zu manipulieren.

(Vielleicht möchten auch this Problem verfolgen, falls eine weniger hacky Lösung schließlich gefunden wird.)

2

spezifische Erweiterungen moduleFileExtensions das Problem behoben für mich mit jest.14.1 Hinzufügen Plattform. Credits to: github link

Hier ist ein Schnipsel aus Beispiel package.json, die alle Dateien einschließlich scene.jest.js (x) ausführen wird.

... 
"jest": { 
    "verbose": true, 
    "preset": "jest-react-native", 
    "moduleFileExtensions": ["js", "android.js", "ios.js"], 
    "testRegex": "\\.scene\\.jest\\.jsx$" 
    } 
...