2016-04-01 67 views
3

我试图学习测试一些JavaScript文件。在webpack中使用mocha和chai。单元测试Javascript - 对象不是构造函数

这是我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 
    } 
    }); 
}; 

这是我的人缘配置使用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) 
+0

不应该'global.should = chai.should()'是'global.should = chai.should'? – henry700

+0

@ henry700不应该是正确的 – tyler

+0

错误消息指出您的webpack配置有错误。你也可以发布吗? – Charminbear

回答

1

我有完全相同的问题,而google搜索解决方案跨越此帖一。不幸的是,没有解决方案,所以花了几个小时尝试不同的建议后,我发现正确的配置。

这里我就是这样做:

  1. 安装phantomjs-polyfill-object-assign模块
 
    npm install --save-dev phantomjs-polyfill-object-assign 
  • 下因缘的files属性上述填充工具配置:
  •  
        ... 
        files: [ 
         '../node_modules/phantomjs-polyfill-object-assign/object-assign-polyfill.js', 
         'test/variables.js', 
         'test/**/*.spec.js', 
        ], 
        ... 
    

    注意:根据您拥有的karma配置,上面的填充路径可能需要调整。

  • 更新babel-loader配置与exclude属性:
  •  
        ... 
        loaders: [{ 
         test: /\.js$/, 
         loader: 'babel-loader', 
         exclude: /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); 
        }); 
    }); 
    
    +1

    请添加一些解释,答案会更有帮助。 – BartoszKP

    相关问题