2015-09-09 19 views
1

我正在研究Browserify React/Flux應用程序,我想對它進行某種UI集成測試。也就是說,使用真實的組件,只存留ajax調用。React/Flux集成測試與業績:如何在每次測試前重新加載應用程序

我現在遇到的問題是,在每次測試之後,商店都會被初始化爲數據,所以運行的下一個測試將因商店的初始狀態無效而失敗。

我希望每個測試都能找到一個全新的React應用程序。

在使用karma + jasmine + browserify時,有沒有一種方法可以在每次測試之前重新啓動/重新加載React + Flux應用程序?

-------編輯1:
我使用單元測試玩笑,但對於集成測試我想用的東西更接近比jsdom一個真正的瀏覽器。

爲此我使用PhantomJs與Karma

測試是非常簡單:

describe('Dashboard component', function() { 

    afterEach(function() { 
     clearAjaxStubs(); 
    }); 

    it('initializes the OrgStore when mounted and sets the state properly', 
    function() { 

     stubAjaxCall(require('./Dashboard-contract.json')); 


     let dashboard = TestUtils.renderIntoDocument(
      <Dashboard params={{orgId: 'org123'}}/> 
     ); 

     executeAllTimers(); 

     expect(dashboard.state.orgData.data).toEqual({name: 'orgName'}); 

    }); 

}); 

基本上,當儀表板部件安裝它將使調用Ajax(爲我創建一個stub)和將初始化Orgstore中使用所述服務器響應所述通量數據流。然後在OrgStore更改並更新組件狀態時通知該組件。

當我只運行這個測試時,測試很完美。

如果存在多個問題,則會顯示該問題:下一個測試會發現OrgStore已經使用此測試放入的數據進行了初始化。

這就是爲什麼我想在每次測試之前重新啓動React應用程序的原因。

+0

你實際上是以瀏覽器爲目標嗎?像網絡驅動程序測試?或者你使用React TestUtils來渲染?一個示例測試可能很好。 –

+0

@DavinTryon是的,我的目標是PhantomJs。這不是網絡驅動程序測試,我使用Karma測試運行器在PhantomJs中運行測試。我添加了一個例子和更多的解釋。謝謝。 – afcastano

回答

1

我正在嘗試做同樣的事情。我認爲這會工作:

beforeEach(function() { 
 
    AppDispatcher = require('../../dispatcher/AppDispatcher'); 
 
    TodoStore = require('../TodoStore'); 
 
    callback = AppDispatcher.register.mock.calls[0][0]; 
 
    });

(來源:http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html#putting-it-all-together

他們在做什麼在這裏被重新要求每個測試,這在理論上應該重置前的應用模塊商店(這是每個人似乎都有的主要問題)。

+0

感謝您的回覆,但您的解決方案不適用於我的案例。我不使用Jest,我使用Karma和PhantomJs。 Jest不會有這個問題,因爲每個需要在一個笑話測試用例中都會返回一個新的模塊副本。使用Karma和PhantomJs,源代碼將被加載一次,並且所有測試套件都使用相同的模塊實例運行。這就是爲什麼商店在每次測試後都沒有被清除的原因。 @theloniusmonkey – afcastano

相關問題