2016-04-05 17 views
7

Ich begegne einem Verhalten, das ich nicht erklären kann. Abhängig von der Verwendung import oder require, dieser Test Erfolge (import) oder schlägt fehl (require).Wie funktioniert 'erfordern' anders als 'importieren' es6?

Bei fehlschlagen, ich habe die folgende Fehlermeldung:

PhantomJS 2.1.1 (Windows 7 0.0.0) immutability a number is immutable FAILED undefined is not a constructor (evaluating 'expect((0, _immutable.List)([1])).toEqualImmutable((0, _immutable.List)([1]))')

Hier ist der Code:

import { Map, List } from 'immutable'; 
const expect = require("expect"); 
// import expectImmutable from "expect-immutable"; 
const expectImmutable = require("expect-immutable"); 

expect.extend(expectImmutable); 

describe("immutability",() => { 
    describe("a number",() => { 
     function increment(currentState) { 
      return currentState + 1; 
     } 
     it("is immutable",() => { 
      expect(List([1])).toEqualImmutable(List([1])); 
      expect(Map({ a: 1 })).toEqualImmutable(Map({ a: 1 })); 
      let state = 42; 
      let nextState = increment(state); 

      expect(List([nextState])).toEqualImmutable(List([43])); 
      expect(List([state])).toEqualImmutable(List([42])); 
     }); 
    }); 
}); 

Hat eine Erklärung für jemand, was hinter den Kulissen geschieht?

+3

Sobald Sie es trotzdem sind transpiling - warum Sie den Unterschied zwischen dem Code mit 'require' und transpiled' import' nicht überprüfen (die 'require' auch sein wird)? – zerkms

+2

Sie suchen wahrscheinlich nach der Standardeigenschaft in dem von Ihnen benötigten Objekt, versuchen Sie 'require (" expect "). Default' und' require ("expect-immutable"). Default' – maioman

Antwort

1

Dank @zerkms und @maioman Ihre Hinweise haben wirklich geholfen. Sie hatten Recht @maioman, Es war aufgrund der Export-Syntax von der Bibliothek verwendet.

es6:

export default foo; 

erfordern:

module.exports = foo; 

also bei Bedarf eine es6 geschrieben Export zu verlangen, sollten wir die Standard-Schlüsselwort behandeln.

require("foo").default; 
Verwandte Themen