Javascript Babel/Karma/Chai给出类型错误:';呼叫者'';被叫人';,和';参数';不能在严格模式函数上访问属性

Javascript Babel/Karma/Chai给出类型错误:';呼叫者'';被叫人';,和';参数';不能在严格模式函数上访问属性,javascript,testing,karma-runner,chai,Javascript,Testing,Karma Runner,Chai,我很难弄清楚为什么这次考试不及格 var expect = require('chai').expect; describe('HelloComponent', function() { it('passes a quite simple test', function() { expect(1 + 4).to.equal(5); }); }); 产生以下错误: DEBUG [web-server]: serving: /Users/ivan/dev/react-star

我很难弄清楚为什么这次考试不及格

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

describe('HelloComponent', function() {

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

});
产生以下错误:

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)
git clone https://github.com/UWFosterIT/react-starter.git
npm install
gulp test:karma

我正在使用babel和ES6模块。ES6代码是隐式严格模式。Chai的断言库与上面设置的strict模式不兼容

解决方案是在webpack babel loader中忽略/不包括node_模块:

这是我的karma.conf.js的相关部分:

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

排除是一个正则表达式测试,而不是一个简单的字符串。

我为此挣扎了大约一天,然后意识到您不需要导入/需要它。它已经和jasmine的
descripe
一样可用

只需删除行
var expect=require('chai')。expect因此您只剩下下面的规范/测试

describe('HelloComponent', function() {

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

});

我看了太多关于Webpack 2+Karma+Chai的不同例子,我忽略了一个事实,即我不需要导入它

安装
Chai
为我正确地解决了这个问题:

$ 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
为了使用
http
请求尝试
chai
退出,我只安装了
chai http
。而不是
chai
本身。但我们同时使用了这两种方法:

'use strict';

const chaiHttp = require('chai-http');
const chai = require('chai');
const expect = chai.expect;
chai.use(chaiHttp);

所以我尝试显式地安装了
chai
,显然它解决了这个问题。我可以使用
expect
,并且不再抛出错误。

所以您不能使用chai断言测试您自己的es6模块,对吗?我可以看到它可以与
assert
一起工作,但不能与
expect
样式一起工作。