2017-02-02 2 views
0

Hier ist meine TestdateiImport reagiert Komponenten mit absolutem Pfad

// /imports/components/main.test.js 
import React from 'react' 
import { shallow, mount } from 'enzyme' 
import Main from './main' 
import TextInput from "/imports/ui/textInput" 
... 

und die main.js hat

// /imports/components/main.js 
import { action1 } from "/imports/actions/myAction" 

aber es wirft einen Fehler, wenn ich den Test ausführen, sagte

Cannot find module '/imports/actions/myAction' from 'main.js'

Wenn ich die import './main' kommentieren, passiert das gleiche mit dem Importieren von T extInput. Ich habe kein Problem mit dem Importieren von Modulen in node_modules.

Wie kann ich Jest oder Webpack anweisen, die Komponente mit dem absoluten Pfad vom Projektverzeichnis (d. H. import Foo from /imports/...) zu importieren?

+0

Wenn es ein Verzeichnis namens Imports auf der gleichen Ebene Ihrer Testdatei gibt, sollten Sie einen Punkt wie: ** Import TextInput von "./imports/ui/textInput"** – Hosar

+0

Sorry ich verpasste die Verzeichnisstruktur. Ich habe den Pfad für die Komponenten und die Testdatei hinzugefügt, die im Prinzip auch importiert werden. – spondbob

+0

können Sie einfach importieren wie 'Import TextInput von" ../ui/textInput "' in main.test.js und 'import {action1} von" ../actions/myAction "'. Wenn Sie mit absolutem Pfad importieren möchten, müssen Sie Alias ​​in Ihrer webpack.config machen und dann importieren wie 'import {action1} von" imports/actions/myAction "'. – Vikramaditya

Antwort

1

Meine Dateistruktur folgt genau dem gleichen Muster wie Sie. Um Jest beizubringen, Importe mit einer / zu verwenden, verwende ich babel-plugin-module-resolver und seine handliche root Option. Mein .babelrc für Jest sieht wie folgt aus:

{ 
    "presets": ["es2015", "meteor"], 
    "plugins": [ 
    "transform-class-properties", 
    "transform-react-constant-elements", 
    "transform-react-inline-elements", 
    "transform-react-remove-prop-types", 
     ["module-resolver", { 
     "root": ["../"], 
     "alias": { 
     "react-router-dom": "react-router-dom/umd/react-router-dom.min.js", 
     "redux": "redux/dist/redux.min.js", 
     "react-redux": "react-redux/dist/react-redux.min.js" 
     } 
    }] 
    ] 
} 

Wie ich Meteor bin mit, die ihre Wurzel Importe besonders angefertigt, ich verstecke meine Jest Nutzung und Konfiguration in ein .jest Verzeichnis an der Wurzel meines Repository erlaubt mir, eine bestimmte zu haben .babelrc ohne Konflikte mit Meteor zu riskieren.

+0

Hey, das sieht vielversprechend aus. Ich werde nach ein paar Tagen loslegen und hier Updates geben. Danke für die Eingaben! – spondbob

+0

Entschuldigung für das späte Update, aber diese Lösung funktioniert super! Installiere das Resolver Modul und setze den Root, nun kann ich 'import .. from '/ imports/foo' benutzen. Vielen Dank. – spondbob

Verwandte Themen