2016-04-05 14 views
7

Sto incontrando un comportamento che non riesco a spiegare. In base all'utilizzo di import o require, questo test ha esito positivo (import) o non riesce (require).In che modo "require" opera diversamente da "import" es6?

In caso di esito negativo, ho il seguente errore:

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]))')

Ecco il codice:

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

Qualcuno ha una spiegazione di ciò che sta accadendo dietro le quinte?

+3

Non appena si sta transpiling comunque - perché non controlli la differenza tra il codice con 'require' e transpiled' import' (che sarà 'require' pure)? – zerkms

+2

probabilmente stai cercando la proprietà di default dell'oggetto che stai cercando, prova 'require (" expect "). Default' e' require ("expect-immutable"). Default' – maioman

risposta

1

Grazie a @zerkms e @maioman i vostri consigli hanno davvero aiutato. Avevi ragione @maioman, era dovuto alla sintassi di esportazione usata dalla libreria.

ES6:

export default foo; 

richiedono:

module.exports = foo; 

Così, quando necessario per richiedere un export ES6 scritta, dovremmo gestire la parola chiave predefinita.

require("foo").default; 
Problemi correlati