问题
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
回答1:
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.
回答2:
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
回答3:
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