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

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

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 httprequests, 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.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!