2016-04-01 5 views
3

Ich versuche zu lernen, einige Javascript-Dateien zu testen. Verwendung von Mokka und Chai mit Webpack.Unit Testing Javascript - Objekt ist kein Konstruktor

Das ist mein 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 
    } 
    }); 
}; 

Und die test/test.webpack.js, die ich auf dem 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); 

mein Test ist sehr einfach, nur um zu testen, ob es src/index.spec.js funktioniert:

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

Wenn ich versuche, um die Tests zu laufen, habe ich Dieser Fehler

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

Sollte nicht 'global.should = chai.should()' 'sein global.should = chai.sollte? – henry700

+0

@ henry700 nein das sollte korrekt sein wie – tyler

+0

Die Fehlermeldung besagt, dass Ihre Webpack-Konfiguration einen Fehler hat. Kannst du das auch posten? – Charminbear

Antwort

1

hatte ich genau das gleiche Problem und während kam in diesem Beitrag für Lösung googeln. Leider gab es keine Lösung. Nachdem ich mehrere Stunden damit verbracht hatte, verschiedene Vorschläge auszuprobieren, fand ich die richtige Konfiguration.

Hier ist, was ich getan habe:

  1. installiert phantomjs-polyfill-object-assign Modul
 
    npm install --save-dev phantomjs-polyfill-object-assign 
  1. oben polyfill konfiguriert unter files Eigenschaft des Karma:
 
    ... 
    files: [ 
     '../node_modules/phantomjs-polyfill-object-assign/object-assign-polyfill.js', 
     'test/variables.js', 
     'test/**/*.spec.js', 
    ], 
    ... 

Hinweis: Abhängig von der Karma-Konfiguration, die Sie haben, ist es möglich, dass der obige Pfad zu Polyfill angepasst werden muss.

  1. Aktualisiert babel-loader Config mit exclude Eigenschaft:
 
    ... 
    loaders: [{ 
     test: /\.js$/, 
     loader: 'babel-loader', 
     exclude: /node_modules/, 
    }, 
    ... 

Das ist es, können die Tests erneut ausgeführt werden.

2

Statt

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

Verwendung

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

Das ist für mich gearbeitet

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

Bitte fügen Sie einige Erklärungen hinzu, die Antwort wird viel hilfreicher sein. – BartoszKP