enzymejs / chai-enzyme

Chai.js assertions and convenience functions for testing React Components with enzyme
MIT License
787 stars 72 forks source link

Use of reserved word 'let' in strict mode #208

Closed mildrenben closed 6 years ago

mildrenben commented 6 years ago

I recently upgraded to React 16 and added the PropTypes package, and now my tests won't run at all with the following error message:

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  SyntaxError: Use of reserved word 'let' in strict mode
  at webpack:///~/chai-as-promised/lib/chai-as-promised.js:3:0 <- test-bundler.js:21772

These are the project dependencies:

"dependencies": {
    "babel-core": "6.17.0",
    "babel-loader": "6.2.5",
    "babel-plugin-rewire": "1.1.0",
    "babel-plugin-transform-runtime": "6.15.0",
    "babel-polyfill": "6.23.0",
    "babel-preset-es2015": "6.14.0",
    "babel-preset-react": "6.11.1",
    "babel-preset-stage-0": "6.3.13",
    "babel-runtime": "6.11.6",
    "better-npm-run": "0.0.13",
    "compression": "1.6.2",
    "css-loader": "0.26.0",
    "cssnano": "3.7.4",
    "debug": "2.2.0",
    "deepmerge": "1.3.2",
    "eventsource-polyfill": "0.9.6",
    "extract-text-webpack-plugin": "1.0.0",
    "file-loader": "0.9.0",
    "file-saver": "1.3.3",
    "fs-extra": "1.0.0",
    "history": "3",
    "html-loader": "0.4.5",
    "html-webpack-plugin": "2.22.0",
    "imports-loader": "0.7.0",
    "ip": "1.1.2",
    "json-loader": "0.5.4",
    "json2csv": "3.7.3",
    "jspdf": "1.3.5",
    "karma-firefox-launcher": "1.0.1",
    "lodash": "4.17.4",
    "moment": "2.17.1",
    "normalize.css": "5.0.0",
    "numeral": "2.0.4",
    "postcss-cssnext": "2.9.0",
    "postcss-import": "9.1.0",
    "postcss-inline-svg": "2.3.0",
    "postcss-loader": "1.1.0",
    "postcss-modules": "0.6.3",
    "postcss-simple-vars": "3.0.0",
    "promise-polyfill": "6.0.2",
    "prop-types": "15.6.0",
    "react": "16.1.1",
    "react-datepicker": "0.56.0",
    "react-dom": "16.1.1",
    "react-modal": "3.1.2",
    "react-moment-proptypes": "1.3.0",
    "react-redux": "5.0.6",
    "react-router": "3",
    "react-router-redux": "4",
    "react-router-scroll": "0.4.2",
    "react-select": "1.0.0-rc.10",
    "react-stickynode": "1.4.0",
    "redux": "3.7.0",
    "redux-devtools-extension": "2.13.0",
    "redux-form": "7.1.2",
    "redux-form-saga": "0.1.0",
    "redux-persist": "4.8.0",
    "redux-responsive": "4.1.1",
    "redux-saga": "0.15.1",
    "rimraf": "2.5.4",
    "sinon-stub-promise": "4.0.0",
    "style-loader": "0.13.1",
    "svg-sprite-loader": "0.2.0",
    "uid": "0.0.2",
    "url-loader": "0.5.7",
    "webpack": "1.12.14",
    "whatwg-fetch": "2.0.3",
    "x2js": "3.1.1",
    "xlsx": "0.11.1",
    "yargs": "6.3.0"
  },
  "devDependencies": {
    "babel-eslint": "7.1.0",
    "babel-plugin-istanbul": "next",
    "chai": "4.1.2",
    "chai-as-promised": "7.1.1",
    "chai-enzyme": "0.8.0",
    "cheerio": "0.22.0",
    "codecov": "1.0.1",
    "concurrently": "3.4.0",
    "deep-freeze": "0.0.1",
    "enzyme": "3.2.0",
    "eslint": "3.0.1",
    "eslint-config-standard": "6.0.0",
    "eslint-config-standard-react": "4.0.0",
    "eslint-plugin-babel": "4.0.0",
    "eslint-plugin-promise": "3.0.0",
    "eslint-plugin-react": "6.0.0",
    "eslint-plugin-standard": "2.0.0",
    "express": "4.14.0",
    "json-server": "0.9.4",
    "karma": "1.7.1",
    "karma-chrome-launcher": "2.2.0",
    "karma-coverage": "1.1.1",
    "karma-mocha": "1.3.0",
    "karma-mocha-reporter": "2.2.5",
    "karma-phantomjs-launcher": "1.0.4",
    "karma-webpack-with-fast-source-maps": "1.10.2",
    "mocha": "4.0.1",
    "nodemon": "1.10.2",
    "phantomjs-prebuilt": "2.1.16",
    "querystring": "0.2.0",
    "redbox-react": "1.5.0",
    "redux-mock-store": "1.2.2",
    "sinon": "2.0.0-pre",
    "sinon-chai": "2.8.0",
    "webpack-bundle-size-analyzer": "2.6.0",
    "webpack-dev-middleware": "1.6.1",
    "webpack-hot-middleware": "2.12.2",
    "webpack-sources": "1.0.2"
  }

There is another error further up, so it's possible this is the cause:

ERROR in ./~/chai-enzyme/build/ReactTestWrapper.js
Module not found: Error: Cannot resolve module 'enzyme/build/react-compat' in /Users/MYNAME/git/MYPROJECT/node_modules/chai-enzyme/build
 @ ./~/chai-enzyme/build/ReactTestWrapper.js 9:19-55

This is the karma.config.js:

const argv = require('yargs').argv
const project = require('./project.config')
const webpackConfig = require('./webpack.config')
const debug = require('debug')('app:config:karma')

debug('Creating configuration.')
const karmaConfig = {
  basePath : '../', // project root in relation to bin/karma.js
  files    : [
    'node_modules/babel-polyfill/dist/polyfill.js',
    {
      pattern  : `./test-bundler.js`,
      watched  : false,
      served   : true,
      included : true
    }
  ],
  singleRun     : !argv.watch,
  frameworks    : ['mocha'],
  reporters     : ['mocha'],
  preprocessors : {
    [`./test-bundler.js`] : ['webpack']
  },
  browsers : ['PhantomJS'],
  webpack  : {
    devtool : 'cheap-module-source-map',
    resolve : Object.assign({}, webpackConfig.resolve, {
      alias : Object.assign({}, webpackConfig.resolve.alias, {
        sinon : 'sinon/pkg/sinon.js'
      })
    }),
    plugins : webpackConfig.plugins,
    module  : {
      noParse : [
        /\/sinon\.js/
      ],
      loaders : webpackConfig.module.loaders.concat([
        {
          test   : /sinon(\\|\/)pkg(\\|\/)sinon\.js/,
          loader : 'imports?define=>false,require=>false'
        }
      ])
    },
    // Enzyme fix, see:
    // https://github.com/airbnb/enzyme/issues/47
    externals : Object.assign({}, webpackConfig.externals, {
      'react/addons'                   : true,
      'react/lib/ExecutionEnvironment' : true,
      'react/lib/ReactContext'         : 'window'
    }),
    sassLoader : webpackConfig.sassLoader,
    postcss : webpackConfig.postcss
  },
  webpackMiddleware : {
    noInfo : true
  },
  coverageReporter : {
    reporters : project.coverage_reporters
  },
  mochaReporter: {
    showDiff: true
  }
}

if (project.globals.__COVERAGE__) {
  karmaConfig.reporters.push('coverage')
  karmaConfig.webpack.module.preLoaders = [{
    test    : /\.(js|jsx)$/,
    include : new RegExp(project.dir_client),
    exclude : /node_modules/,
    loader  : 'babel',
    query   : Object.assign({}, project.compiler_babel, {
      plugins : (project.compiler_babel.plugins || []).concat('istanbul')
    })
  }]
}

module.exports = (cfg) => cfg.set(karmaConfig)

Anyone have any ideas as to why this isn't working now?

ayrton commented 6 years ago

Can you confirm this error does not originate from chai-as-promised as suggested in the error message? Feel free to re-open if this is chai-enzyme's fault.

mildrenben commented 6 years ago

@ayrton Fixed the chai-as-promised issue. Now it definitely appears to be chai-enzyme.

PhantomJS 2.1.1 (Mac OS X 0.0.0) ERROR
  Error: Cannot find module "enzyme/build/react-compat"
  at webpack:///~/chai-enzyme/build/ReactTestWrapper.js:9:0 <- test-bundler.js:91728

Is this just incorrect versions of enzyme? I'm using 3.2.0

ayrton commented 6 years ago

@mildrenben you have to use the beta version of chai-enzyme if you're using enzyme > 3. See https://github.com/producthunt/chai-enzyme/issues/199 for more information.