2017-07-28 1 views
1

J'écris des tests pour redimensionner des épopées observables avec du jasmin. Lors de l'exécution de l'un des tests "seul" (avec fit(...)), le test réussit, mais lors de son exécution avec un autre test (avec it(...)), il échoue car les actions sont réparties dans le mauvais ordre. Toute aide appréciée!rxjs/redux observable Actions distribuées dans le mauvais ordre lors de l'exécution de plusieurs tests

Il y a quelques épopées, donc je ne vais pas les publier à moins que ce soit nécessaire.

Ceci est (un peu) le fichier de test:

const epicMiddleware = createEpicMiddleware(combinedEpics) 
const mockStore = configureMockStore([epicMiddleware]) 

describe('my test',() => { 
    let store 

    beforeEach(() => { 
    store = mockStore(...) 
    jasmine.Ajax.install() 
    }) 

    afterEach(() => { 
    jasmine.Ajax.uninstall() 
    epicMiddleware.replaceEpic(combinedEpics) 
    }) 

    // test 1 passes 
    it("test 1",() => { 
    jasmine.Ajax.stubRequest("url-1").andReturn({ 
     status: 200, 
     responseText: JSON.stringify({ ... }) 
    }) 

    store.dispatch(initializePage()) 

    expect(store.getActions()).toEqual([ 
     { type: INITIALIZE_PAGE }, 
     { type: MY_ACTION1 }, 
     { type: INITIALIZED_PAGE } 
    ]) 
    }) 

    // test 2 passes with `fit` but not with `it` 
    it("test 2",() => { 
    jasmine.Ajax.stubRequest("url-2").andReturn({ 
     status: 200, 
     responseText: JSON.stringify({ ... }) 
    }) 

    store.dispatch(initializePage()) 

    expect(store.getActions()).toEqual([ 
     { type: INITIALIZE_PAGE }, 
     { type: MY_ACTION2 }, 
     { type: INITIALIZED_PAGE } 
    ]) 
    /** 
    * With `fit` the actions come in the order [INITIALIZE_PAGE, MY_ACTION2, INITIALIZED_PAGE] 
    * With `it` the actions come in the order [INITIALIZE_PAGE, INITIALIZED_PAGE, MY_ACTION2] 
    */ 
    }) 
}) 

Répondre

0

Turns out cela fonctionne si je crée epicMidleware dans beforeEach au lieu d'utiliser epicMiddleware.replace(combinedEpics). Comme ceci:

describe('my test',() => { 
    let store 
    let epicMiddleware 
    let mockStore 

    beforeEach(() => { 
    epicMiddleware = createEpicMiddleware(combinedEpics) 
    mockStore = configureMockStore([epicMiddleware]) 
    store = mockStore(...) 
    jasmine.Ajax.install() 
    }) 

    afterEach(() => { 
    jasmine.Ajax.uninstall() 
    }) 

    ...