2017-04-06 8 views
0

React 응용 프로그램을 만들고 기본 프로젝트로 react-boilerplate을 사용하고 있습니다. 내 머리를 Redux, Sagasreselect으로 가져 와서 첫 번째 구성 요소를 실행 한 후에 해당 단위 테스트를 작성하고 싶습니다. 그러나 불행하게도 나는 제대로 테스트하기 위해 해당 선택과 선택 문에 대한 테스트를 얻을 수 아니에요 :jasmine을 사용하여`select (reselectSelector)`를 테스트하는 방법은 무엇입니까?

내 관점에서
const selectDomain =() => (state) => state.get('myDomain'); 
const selectDomainMessage =() => createSelector(selectDomain(), (domain) => domain.get('message')); 

function* send() { 
    const message = yield select(selectDomainMessage()); 
    ... 
    yield put(sentAction(message); 
} 

describe('send Saga',() => { 
    const generator = send(); 

    it('should return select descriptor',() => { 
    let expectedDescriptor = select(selectDomainMessage()); 
    let returnedDescriptor = generator.next().value; 

    expect(returnedDescriptor).toEqual(expectedDescriptor); 
    }); 
}); 

,이 테스트가 작동해야하지만 (정말 도움이되지 실패) 오류 메시지

예상 개체 ({@@ REDUX-사가/IO : 사실, SELECT : 오브젝트 ({셀렉터 : 함수, 인수 []})})와 동일한 개체 (행 {@@ redux- saga/IO : true, SELECT : Object ({selector : Function, args : []})}).

문제를 쉽게 재현하려면 필요한 환경으로 JSFiddle을 만들었습니다. 어쩌면 누군가 내가 잘못하고있는 것을 말해 줄 수 있습니다.

답변

1

예상 및 실제 사례의 선택기 기능이 서로 동등하지 않으므로 테스트가 실패합니다.

함수 selectDomainMessagecreateSelector에 의해 반환 된 함수를 반환합니다. createSelector이 실행될 때마다 새로운 함수를 반환합니다. 테스트 통과하기 위해

, 당신은 변수로 createSelector의 반환 기능을 캡처하고 있음을 selectDomainMessage 반환 할 수 있습니다 :

const selector = createSelector(selectDomain(), (domain) => domain.get('message')) 
const selectDomainMessage =() => selector; 

수정을 JSFiddle