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
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.
I struggled with this for about a day then realised you don't need to import/require chai. It's already available as is jasmine's describe
.
Simply remove the line var expect = require('chai').expect;
so you are left with the spec/test below.
describe('HelloComponent', function() {
it('passes a quite simple test', function() {
expect(1 + 4).to.equal(5);
});
});
I had looked at so many different examples of Webpack 2 + Karma + Chai that I missed the fact I didn't need to import it
Installing chai
properly solved the issue for me:
$ npm i -D chai
+-- chai@4.0.2
| +-- check-error@1.0.2
| +-- deep-eql@2.0.2
| | `-- type-detect@3.0.0
| +-- get-func-name@2.0.0
| +-- pathval@1.1.0
| `-- type-detect@4.0.3
`-- nock@9.0.13
`-- chai@3.5.0
+-- deep-eql@0.1.3
| `-- type-detect@0.1.1
`-- type-detect@1.0.0
In order to try chai
out with http
requests, I installed only chai-http
. And not chai
itself. But were using both of them:
'use strict';
const chaiHttp = require('chai-http');
const chai = require('chai');
const expect = chai.expect;
chai.use(chaiHttp);
So I've tried to installed chai
explicitly and apparently it solved the issue. I can use expect
and the error isn't thrown any more.
来源:https://stackoverflow.com/questions/29105947/babel-karma-chai-gives-typeerror-caller-callee-and-arguments-proper