2017-05-22 91 views
12

React uygulamasının ilk grup boyutunu, sayfa yüklenemeyen eşzamansız olarak yüklenen ayrı bir paketten yükleyerek, webpack kod bölme özelliğini (require.ensure) kullanıyorum.Webpack'in require.ensure Stubunu Nasıl Yaparım?

Mükemmel çalışıyor, ama Bunun için birim sınama yazarken sorun yaşıyorum.

Benim sınama ayarlarım Mocha, Chai ve Sinon dayanmaktadır. test çalıştırırken

describe('When I render the component',() => { 
    let component, 
     mySandbox; 
    beforeEach(() => { 
     mySandbox = sandbox.create(); 
     mySandbox.stub(require, 'ensure'); 
     component = mount(<PageHeader />); 
    }); 
    describe('the rendered component',() => 
     it('contains the SideNav component',() => 
      component.find(SideNav).should.have.length(1) 
     ) 
    ); 
    afterEach(() => mySandbox.restore()); 
}); 

, bu hata mesajı alıyorum: Burada

Ben şimdiye kadar denedim kodundan ilgili alıntıdır için kanca "her öncesinde"

"içerir SideNav bileşeni ": require.ensure sadece biz var olan bir yöntemdir, çünkü bu olur

sağlamak varolmayan kendi özelliğini saplama Can not paket demeti, ancak testlerimi web paketi ile paketlemiyorum, ne de yapmak istiyorum çünkü daha fazla yük ve muhtemelen daha uzun deneme yürütme süreleri yaratacaktır.

Yani benim soru:

WebPack yoluyla testleri çalıştırmadan webpack en require.ensure Sinon ile saplama için bir yolu var mı? böylece require.ensure etrafında testinde gerekli modülünden bu eşsiz require almak için require soyutlama bir tür ve o require için ensure() bir taklidini eklemektir alay tek yolu gerektiren bir

+0

Siz doğrusınız. Her modül benzersiz bir 'require' işlevini alır. Düşündüğümden oldukça karmaşık. Bu konuda daha fazla bilgiyi buradan okuyabilirsiniz (http://fredkschott.com/post/2014/06/require-and-the-module-system/). 'Require.esnure' maymun yama için çok zor olacak. Ayrıca, @hinok –

+0

tarafından önerilen babel-plugin-rewire gibi bir şeyi düşünmenizi öneririz. Sorununuz şu adreste yanıtlandı: https://stackoverflow.com/questions/33070482/writing-tests-for-javascript-module-using- webpacks-require-warranty-function –

+0

Şey, projemi başlattığımda rewire kullanarak değerlendirdim ve Mockery'nin çok üstün olduğunu anladım, bu yüzden bu yazıyla rewire çözümünü nasıl kullanacağımı tahmin etmeliyim alay. –

cevap

3

Her modül kendi örneği vardır örneği.

Sen babel-plugin-rewire kullanabilir ve

const require = myComponent.__get__('require'); 
require.ensure =() => { /* mock here */}; 

gibi require almak için gaz giderici kullanabilirsiniz değilim% 100 işe yarayacak ama kesinlikle bu yönde gitmeye çalışacağını emin olun. Probleminizle ilgili olan this issue'u github'da okumanızı öneririm ve çok şey açıklar.