2016-11-24 8 views
0

私たちは、私は「サブサガ」loadAssets 2つの最初の収量はOKですテストサガの単体テスト構成の仕方は?

import * as LibraryActions from 'actions/libraryActions'; 
import loadAssets from './loadAssets'; 

export default function* libraryChangeCategory(category) { 
    yield put(LibraryActions.librarySetCategory(category)); 

    yield put(LibraryActions.librarySetLoading()); 
    yield* loadAssets(); 
    yield put(LibraryActions.libraryResetLoading()); 
} 

そしてlibraryChangeCategoryから呼び出す次の例では、そのよう https://github.com/yelouafi/redux-saga/blob/5a6db57c77141b85b82aa097933ad687aacff8dc/docs/advanced/ComposingSagas.md

にサガを構成することができます。

import libraryChangeCategory from 'sagas/library/changeCategory'; 
const generator = libraryChangeCategory(LibraryCategories.Backgrounds); 

let next; 

it('should set category',() => { 
    next = generator.next(); 

    expect(next.value).toEqual(
     put(LibraryActions.librarySetCategory(LibraryCategories.Backgrounds))); 
}); 

しかし、ここではテストしたくないloadAssetsジェネレータ。 私はちょうどそれを嘲笑したい。 どのように?それは可能ではないようですか?

function* mockGen() { 
    yield; 
} 
let loadAssets = libraryChangeCategory.__get__('loadAssets'); 

// don't work 
loadAssets.__Rewire__(loadAssets.__get__('loadAssets'), mockGen); 

// don't work too 
spyOn(loadAssets, 'loadAssets').and.callFake(function(st) { 
    yield; 
}); 

答えて

2

私は

yield* loadAssets();

、代わりに直接発電機を呼び出す、あなたがredux-saga.callを経由してサブサガを呼び出すことができ、解決策を見つけ、あなたがしなければならない。すなわち

yield call(loadAssets);

に変更し、単体テストよりも

import loadAssets from 'sagas/library/loadAssets'; 

    it('should call sub-saga',() => { 
    next = generator.next(); 

    expect(next.value).toEqual(call(loadAssets)); 
    }); 
関連する問題