2016-04-05 31 views
7

Açıklayamadığım bir davranışla karşılaşıyorum. import veya require'un kullanılmasına bağlı olarak, bu test başarıları (import) veya başarısız olur (require). durumunda'İhtiyaç' es6'dan farklı olarak nasıl çalışır?

başarısız, ben aşağıdaki hata:

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

kimse sahnenin arkasında neler olduğunu dair bir açıklama var mı:

İşte

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

kodudur?

+3

yine de transpiling konum olarak en kısa sürede - neden require' 'ile kod arasındaki farkı kontrol etmek ve (aynı zamanda' require' olacaktır) transpiled 'import' yok? – zerkms

+2

Muhtemelen gereksinim duyduğunuz nesnenin varsayılan özelliğini arıyorsunuzdur, 'require ("expect")' ı deneyin. Default 've 'require (" expect-immutable "). – maioman

cevap

1

Teşekkürler @zerkms ve @maioman önerileriniz gerçekten yardımcı oldu. Haklıydınız @maioman, Bu kütüphane tarafından kullanılan dışa aktarma sözdizimi nedeniyle oldu.

ES6:

export default foo; 

gerektirir: Bir ES6 yazılı ihracat gerektirecek şekilde gerektiğinde

module.exports = foo; 

Yani, biz varsayılan anahtar kelime işlemek gerekir.

require("foo").default; 
İlgili konular