Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Babel / Karma / Chai gives TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions

I having trouble figuring out why this test is not passing.

var expect = require('chai').expect;

describe('HelloComponent', function() {

  it('passes a quite simple test', function() {
    expect(1 + 4).to.equal(5);
  });

});

produces this error:

DEBUG [web-server]: serving: /Users/ivan/dev/react-starter/node_modules/karma/static/context.html
DEBUG [web-server]: serving (cached): /Users/ivan/dev/react-starter/node_modules/mocha/mocha.js
DEBUG [web-server]: serving (cached): /Users/ivan/dev/react-starter/node_modules/karma-mocha/lib/adapter.js
DEBUG [web-server]: serving (cached): /Users/ivan/dev/react-starter/test/front-end/tests.webpack.js
Chrome 41.0.2272 (Mac OS X 10.10.2) HelloComponent passes a quite simple test FAILED
        TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
            at new Assertion (/Users/ivan/dev/react-starter/test/front-end/tests.webpack.js:2166:43 <- webpack:///~/chai/lib/chai/assertion.js:33:42)
            at chai.expect (/Users/ivan/dev/react-starter/test/front-end/tests.webpack.js:3592:13 <- webpack:///~/chai/lib/chai/interface/expect.js:9:11)
            at Context.<anonymous> (/Users/ivan/dev/react-starter/test/front-end/tests.webpack.js:89:6 <- webpack:///test/front-end/hello-spec.js:10:4)

It might have something to do with babel wrapping things in strict mode?

Does anyone know what steps I can start to take to figure out what's going here?

The code is open source and available here: https://github.com/UWFosterIT/react-starter/tree/gulp-webpack

to install and reproduce this error:

git clone https://github.com/UWFosterIT/react-starter.git
npm install
gulp test:karma
like image 391
Ivan Avatar asked Mar 17 '15 17:03

Ivan


1 Answers

I'm using babel and ES6 modules. ES6 code is implictly strict mode. Chai's assertion library is not compatible with strict mode as it's set up above.

The solution is to ignore / not include node_modules in the webpack babel loader:

This is the relevant section of my karma.conf.js:

webpack: {
  // any necessary webpack configuration
  devtool: 'inline-source-map',
  module: {
    loaders: [
      { test: /\.js$/, loader: 'babel', exclude: /node_modules/ }
    ]
  }
},

The exclude is a regex test instead of a simple string.

like image 178
Ivan Avatar answered Oct 26 '22 14:10

Ivan