2016-07-14 9 views
2

Kurz gesagt funktioniert meine vorhandene React Native App ohne .bablerc, ich kann Jest nur mit einem .babelrc arbeiten (da ich es6 Syntax benutze), und sobald ich den .babelrc meine native App reagieren bricht mit dem folgenden Fehler.Jest Fehler ohne .babelrc Reagiere native Fehler damit

React Native Error Image

Nach der Zugabe von .babelrc mir mehr [BABEL] Notizen in meinen reagieren nativen Server sehen, die ohne die .babelrc nicht da sind. Hier ist ein Beispiel (I entfernt Weg vor node_modules), obwohl ich glaube nicht, dass dies ein Problem ist

[BABEL] Note: The code generator has deoptimised the styling of "/node_modules/react-native-htmlview/vendor/htmlparser2.js" as it exceeds the max of "100KB". 

Gibt es eine Möglichkeit, die „reagieren-native“ .babelrc Presets nur mit Scherz laufen zu isolieren? Gibt es eine einfachere Lösung, die ich vermisse, um sowohl Spaß zu haben als auch zu reagieren, Seite an Seite zu arbeiten? Gibt es zusätzliche Voreinstellungen in .babelrc, die ich für eine native Umsetzung brauche?

Ich bin auf reagieren nativer 0.29.0 und hier meine .babelrc und package.json

.babelrc

{ 
    "presets": ["react-native"] 
} 

package.json

{ 
    "name": "MyApp", 
    "version": "0.0.1", 
    "private": true, 
    "scripts": { 
    "test": "jest", 
    "start": "node node_modules/react-native/local-cli/cli.js start", 
    }, 
    "dependencies": { 
    "base-64": "^0.1.0", 
    "keymirror": "^0.1.1", 
    "lodash": "^4.13.1", 
    "moment": "^2.13.0", 
    "ramda": "^0.21.0", 
    "react": "^15.1.0", 
    "react-native": "^0.29.0", 
    "react-native-animatable": "^0.6.1", 
    "react-native-button": "^1.6.0", 
    "react-native-collapsible": "^0.7.0", 
    "react-native-cookies": "git://github.com/sdg9/react-native-cookies", 
    "react-native-drawer": "^2.2.3", 
    "react-native-htmlview": "^0.5.0", 
    "react-native-material-design": "^0.3.6", 
    "react-native-material-kit": "^0.3.2", 
    "react-native-router-flux": "^3.30.0", 
    "react-native-scrollable-tab-view": "^0.5.2", 
    "react-native-shared-preferences": "0.0.5", 
    "react-native-simple-store": "^1.0.1", 
    "react-native-spinkit": "^0.1.2", 
    "react-native-swiper": "^1.4.5", 
    "react-native-vector-icons": "^2.0.3", 
    "react-redux": "^4.4.5", 
    "react-thunk": "^1.0.0", 
    "redux": "^3.5.2", 
    "redux-actions": "^0.10.0", 
    "redux-logger": "^2.6.1", 
    "redux-thunk": "^2.1.0", 
    "tcomb-form-native": "^0.5.1", 
    "underscore": "^1.8.3" 
    }, 
    "devDependencies": { 
    "babel-eslint": "^6.1.2", 
    "babel-jest": "^13.2.2", 
    "babel-polyfill": "^6.9.1", 
    "eslint": "^3.0.1", 
    "eslint-plugin-react": "^5.2.2", 
    "eslint-plugin-react-native": "^1.1.0", 
    "flow-bin": "^0.28.0", 
    "jest-cli": "^13.2.3", 
    "regenerator": "^0.8.46", 
    "regenerator-runtime": "^0.9.5", 
    "remote-redux-devtools": "^0.3.3" 
    }, 
    "jest": { 
    "haste": { 
     "defaultPlatform": "ios", 
     "platforms": [ 
     "ios", 
     "android" 
     ], 
     "providesModuleNodeModules": [ 
     "react-native" 
     ] 
    } 
    } 
} 

Antwort

3

Für RN, Jest Läuft den Code durch einen leicht angepassten Pre-Prozessor, der spezifisch für Jest ist (also nicht ganz derselbe, den RN zum Erstellen der App verwendet). Dieser Präprozessor Schiffe mit RN im jestSupport/ Verzeichnis, und Sie sollten es in Ihrem Jest Konfiguration angeben:

... 
"scriptPreprocessor": "node_modules/react-native/jestSupport/preprocessor.js", 
"setupEnvScriptFile": "node_modules/react-native/jestSupport/env.js", 
"haste": { 
.... 

ich auf RN gerade getestet haben 0,29 und Jest CLI 13.0.0 und meine Tests kompilieren mit dieser einfach gut Konfiguration in meiner package.json und eine .babelrc, die dem entspricht, was Sie in die Frage gestellt haben.

Übrigens, wenn Sie diesen Präprozessor angeben, sollten Sie eigentlich nicht die .babelrc benötigen, um die Tests auszuführen.

+0

Vielen Dank das ist hilfreich. Ich bin fast da, aber ich benutze Es6 Import-Aussagen, die scherzt, sogar mit jest.disableAutomock(). Ich habe bestätigt, wenn ich auf require() umwechseln will, funktioniert es aber ich bin 1 Import down 1843 zu gehen und würde lieber einen Weg finden, meine es6-Import-Syntax beizubehalten. Ich kann Jest mit ES6-Import-Syntax bestätigen funktioniert mit .babelrc Definition "react-native" Voreinstellung, aber das bringt mich zurück auf Platz eins, wie es meine Anwendung bricht. Hast du eine Idee, wie man es6 importieren kann, um mit Spaß zu arbeiten, ohne .babelrc zu benutzen? – Steven

+0

Es ist weil Jest im Wesentlichen monkeypat die 'require' Funktion (ich finde das nervig, um ehrlich zu sein). Versuchen Sie '' automock ': false, 'als Schlüssel in Ihrer Jest-Konfiguration in Ihrem Paket.json. Aus irgendeinem Grund funktioniert das Ausschalten von automocking global in der Konfiguration mit es6-Importen, während 'jest.disableAutomock()' Aufrufe in tatsächlichen Unit-Tests nicht funktionieren. –

+0

Danke, dass es mit deiner Hilfe funktioniert hat, aber am Ende fühlte sich der Scherz so knifflig (und lief wirklich langsam), so dass ich am Ende mit einem [Mokka-Ansatz] (https://blog.formidable.com/unit-testing) umgestiegen bin -react-native-mit-Mocha-und-Enzym-51518f13ba73 # .erhyf3s2n) – Steven

Verwandte Themen