Pablo
Pablo

Reputation: 10602

Unit Testing Javascript - Object is not a constructor

I'm trying to learn to test some javascript files. Using mocha and chai with webpack.

This is my 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
    }
  });
};

And this the test/test.webpack.js which I use on the karma config:

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);

my test is very basic, just in order to test if it works src/index.spec.js:

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

When I try to run the tests, I got this error

./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)

Upvotes: 3

Views: 4339

Answers (2)

Madhuparna Bhaumik
Madhuparna Bhaumik

Reputation: 21

Instead of

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

use

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

This worked for me

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

Upvotes: 2

Andrej
Andrej

Reputation: 81

I had exactly same issue and while googling for solution came across this post. Unfortunately there was no solution, so after spending several hours trying different suggestions I found right config.

Here's what I did:

  1. Installed phantomjs-polyfill-object-assign module
    npm install --save-dev phantomjs-polyfill-object-assign
  1. Configured above polyfill under files property of karma:
    ...
    files: [
        '../node_modules/phantomjs-polyfill-object-assign/object-assign-polyfill.js',
        'test/variables.js',
        'test/**/*.spec.js',
    ],
    ...

Note: depending on karma config you have, it's possible that above path to polyfill needs adjustment.

  1. Updated babel-loader config with exclude property:
    ...
    loaders: [{
        test: /\.js$/,
        loader: 'babel-loader',
        exclude: /node_modules/,
    },
    ...

That's it, tests can be run again.

Upvotes: 3

Related Questions