【问题标题】:Unit Testing Javascript - Object is not a constructor单元测试 Javascript - 对象不是构造函数
【发布时间】:2016-04-01 17:42:07
【问题描述】:

我正在尝试学习测试一些 javascript 文件。在 webpack 中使用 mocha 和 chai。

这是我的test/karma.conf.js

var webpack = require('webpack');

module.exports = function (config) {
  config.set({
    browsers: [ 'PhantomJS' ],
    singleRun: true,
    frameworks: [ 'mocha' ],
    files: [
      'tests.webpack.js'
    ],
    preprocessors: {
      'tests.webpack.js': [ 'webpack', 'sourcemap' ]
    },
    reporters: [ 'spec' ],
    webpack: {
      devtool: 'inline-source-map',
      module: {
        loaders: [
          { test: /\.js$/, loader: 'babel-loader' }
        ]
      }
    },
    webpackServer: {
      noInfo: true
    }
  });
};

这是我在 karma 配置中使用的 test/test.webpack.js

import chai from 'chai'

global.chai = chai
global.expect = chai.expect
global.should = chai.should()

var context = require.context('../src', true, /spec\.js$/);
context.keys().forEach(context);

我的测试很基础,只是为了测试它是否有效src/index.spec.js

describe("A test suite", function() {
   beforeEach(function() { });
   afterEach(function() { });
   it('should fail', function() { expect(true).to.be.true; });
});

当我尝试运行测试时,我得到了这个错误

./node_modules/karma/bin/karma start test/karma.conf.js

01 04 2016 14:15:08.191:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
01 04 2016 14:15:08.255:INFO [launcher]: Starting browser PhantomJS
01 04 2016 14:15:12.443:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket /#GivXNjnm0g5H9DBXAAAA with id 29314805

PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR
  TypeError: Object is not a constructor (evaluating '$export($export.S + $export.F * !__webpack_require__(17), 'Object', { defineProperty: __webpack_require__(13).f })')
  at C:/Users/pablo.feldman/Documents/Projects/jpmc-components/test/tests.webpack.js:535 <- webpack:///~/babel-runtime/~/core-js/library/modules/es6.object.define-property.js:3:0

PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 0 of 0 ERROR (0.101 secs / 0 secs)

【问题讨论】:

  • 不应该global.should = chai.should()global.should = chai.should 吗?
  • @henry700 不应该是正确的
  • 错误信息表明你的 webpack-configuration 有错误。你也可以发一下吗?

标签: javascript unit-testing mocha.js karma-runner chai


【解决方案1】:

我遇到了完全相同的问题,在谷歌搜索解决方案时遇到了这篇文章。不幸的是没有解决方案,所以在花了几个小时尝试不同的建议后,我找到了正确的配置。

这就是我所做的:

  1. 已安装phantomjs-polyfill-object-assign 模块
npm install --save-dev phantomjs-polyfill-object-assign
  1. files karma 属性下的 polyfill 上配置:
... 文件:[ '../node_modules/phantomjs-polyfill-object-assign/object-assign-polyfill.js', '测试/变量.js', 'test/**/*.spec.js', ], ...

注意:根据您的业力配置,上述 polyfill 路径可能需要调整。

  1. 使用exclude 属性更新了babel-loader 配置:
... 装载机:[{ 测试:/\.js$/, 加载器:'babel-loader', 排除:/node_modules/, }, ...

就是这样,可以再次运行测试。

【讨论】:

    【解决方案2】:

    代替

    expect(true).to.be(true);
    

    使用

    expect(true).to.equal(true);
    

    这对我有用

    describe('App', function(){
     it('should set the color to red', function(){
         // expect(true).to.be(true);
         expect(true).to.equal(true);
        });
    });
    

    【讨论】:

    • 请添加一些解释,答案会更有帮助。
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2022-07-04
    • 1970-01-01
    相关资源
    最近更新 更多