2017-08-09 159 views
1

我很難讓我的測試套件設置。我有一個React + Redux + Webpack項目,並試圖添加Jest。我可以運行測試,但是我無法將import任何東西插入到我的測試文件中。例如,試圖導入我的終極版動作的時候,我得到以下錯誤:Jest和Webpack - 意外令牌導入

/Users/nicholashaley/Desktop/Work/Ada/app/test/test.js:1 ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import * as actions from 'actions'; ^^^^^^ SyntaxError: Unexpected token import

我猜我的WebPack配置沒有正確配置,因此無法識別import關鍵字。

我的WebPack的配置是這樣的:

var webpack = require('webpack'); 
var ExtractTextPlugin = require('extract-text-webpack-plugin'); 
var path = require('path'); 
var AssetsPlugin = require('assets-webpack-plugin') 
var assetsPluginInstance = new AssetsPlugin({filename: 'assets.json', prettyPrint: true}) 
var HtmlWebpackPlugin = require('html-webpack-plugin'); 

require('dotenv').config() 

module.exports = { 
    entry: './source/app.js', 
    output: { 
     path: __dirname + '/build', 
     publicPath: '/', 
     filename: 'bundle.js' 
    }, 
    externals: { 
     'locker': 'Locker' 
    }, 
    stats : { 
     children: false 
    }, 
    devServer : { 
     historyApiFallback: { 
      disableDotRule: true 
     }, 
     stats : { 
      timings: false, 
      assets: false, 
      chunks: false, 
      modules: false, 
      children: false, 
      publicPath: false 
     }, 
     disableHostCheck: true 
    }, 
    devtool: 'source-map', 
    module: { 
     loaders: [ 
      { 
       test: /\.(jsx|js)$/, 
       exclude: /node_modules/, 
       loader: "babel-loader", 
       query: { presets: [ 'es2015', 'react' ] } 
      }, 
      { 
       test: /\.scss$/, 
       loader: ExtractTextPlugin.extract('css!sass') 
      }, 
      { 
       test: /\.(jpe?g|gif|png|woff|ttf|wav|mp3)$/, 
       loader: "file" 
      }, 
      {include: /\.json$/, loaders: ["json-loader"]}, 
      { 
       test: /\.svg$/, 
       loader: 'svg-sprite?' + JSON.stringify({ 
        name: '[name]_[hash]', 
        prefixize: true 
       }) 
      } 
     ] 
    }, 
    resolve: { 
     root: path.resolve(__dirname), 
     alias: { 
      components: 'source/components', 
      services: 'source/services', 
      selectors: 'source/selectors', 
      middleware: 'source/middleware', 
      stylesheets: 'source/stylesheets', 
      actions: 'source/actions', 
      schemas: 'source/schemas', 
      reducers: 'source/reducers', 
      icons: 'static/icons' 
     }, 
     extensions: ['', '.json','.js', '.jsx'] 
    } 
}; 

而且我的package.json的相關部分:

{ 
    "scripts": { 
    "build": "webpack", 
    "start": "webpack-dev-server --port 3001 --inline --hot", 
    "build-staging": "webpack --config ./webpack-staging.config.js", 
    "build-prod": "webpack --config ./webpack-production.config.js", 
    "deploy": "node deploy.js", 
    "test": "jest", 
    "test:watch": "npm test -- --watch" 
    }, 
    "devDependencies": { 
    "assets-webpack-plugin": "^3.5.0", 
    "babel-core": "^6.14.0", 
    "babel-jest": "^19.0.0", 
    "babel-loader": "^6.2.9", 
    "babel-polyfill": "^6.23.0", 
    "babel-preset-es2015": "^6.24.1", 
    "babel-preset-react": "^6.24.1", 
    "colors": "^1.1.2", 
    "css-loader": "^0.26.1", 
    "extract-text-webpack-plugin": "^1.0.1", 
    "file-loader": "^0.10.1", 
    "jest": "^19.0.2", 
    "node-sass": "^3.4.2", 
    "nodemon": "^1.9.1", 
    "react-hot-loader": "^1.3.1", 
    "recursive-readdir": "^2.0.0", 
    "rimraf": "^2.5.4", 
    "sass-loader": "^4.0.2", 
    "style-loader": "^0.13.1", 
    "svg-loader": "0.0.2", 
    "svg-sprite-loader": "^0.3.0", 
    "svg-url-loader": "^1.1.0", 
    "uglify-js": "^2.7.3", 
    "uglifycss": "0.0.21", 
    "webpack": "^1.14.0", 
    "webpack-dev-server": "^1.16.3" 
    } 
} 

UPDATE

我加了一個.babelrc文件,{"presets": ["es2015", "react"]}和導入工作中。我不完全明白爲什麼(特別是考慮到進口在以前的源代碼工作)。

此外,我依賴項目中的路徑別名(如我的webpack配置中定義的),並且這些似乎不受測試文件的尊重。

回答

1

如果你的webpack配置設置爲正確使用babel-loader,那麼你的webpack.config.js會全部搞亂,因爲如果加載器不工作,你不需要.babelrc文件。下面是一個簡單的例子,介紹如何使用Webpack工作而不使用.babelrc文件來加載模塊,正如你所看到的,我正在使用babel-preset-latest軟件包。

module: { 
     rules: [ 
      { 
       loader: "babel-loader", 
       options: { 
        presets: ["latest"] 
       } 
      } 
     ] 
    } 
+0

除了Jest測試,我的裝載機工作正常。包含.babelrc文件似乎繞過了「導入」問題,儘管不完全確定原因。我嘗試過實現上面的內容(或者至少與Webpack 1相同)並省略.babelrc文件,但仍然沒有骰子。 我傾向於認爲這個問題是專門與Jest配置。 –

+0

根據Jest文檔,Jest需要一個.babelrc文件,「不要忘記在項目的根文件夾中添加一個.babelrc文件。」 –