2016-08-02 1 views
5

그래서 같은 API를 호출을 트리거 addItemsToCollection라는 작업이 있습니다'redux-api-middleware'및 [CALL_API]를 사용하는 redux 작업을 테스트하는 방법은 무엇입니까?

it('should create an action to add items to a collection',() => 
{ 
    const collectionId = 1; 
    const itemIds = [1,2,3]; 

    const expectedAction = 
    { 
    [CALL_API]: 
    { 
     endpoint: `/collections/${collectionId}/items`, 
     method: 'POST', 
     body: JSON.stringify(itemIds), 
     types: 
     [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
     ] 
    } 
    }; 

    expect(addItemsToCollection(collectionId, itemIds)).toEqual(expectedAction); 
}); 

그것은 수행합니다

import {CALL_API} from 'redux-api-middleware'; 

export function addItemsToCollection(collectionId, itemIds) 
{ 
    return {[CALL_API]: 
    { 
     endpoint: `/collections/${collectionId}/items`, 
     method: 'POST', 
     body: JSON.stringify(itemIds), 
     types: 
     [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
     ] 
    } 
    }; 
} 

나는이 작업을 위해 간단하게 테스트를 작성하려고

같은 생성되는 하지만 그것은 작업 생성자 함수뿐만 아니라 expectedAction에 대한 빈 객체 {}를 반환하고 있기 때문에 발생합니다. 별로 사용하지 않습니다.

그래서 내 질문은,

왜 빈 객체가 반환되고있다?

이 테스트를 수행하는 적절한 방법은 무엇입니까?

const expectedAction = 
{ 
    [CALL_API]: { 
    endpoint: '/collections/1/items', 
    method: 'POST', 
    body: "[1,2,3]", 
    types: 
    [ 
     ADD_ITEMS, 
     { type: ADD_ITEMS_SUCCESS }, 
     ADD_ITEMS_FAIL 
    ] 
    } 
}; 

당신은 결국 상수를 조롱하고 원시 데이터를 사용할 수 있습니다 : 당신이 테스트 무엇의 일부이기 때문에

답변

0

귀하의 예상 데이터는 계산하지 않아야합니다.

빈 개체의 경우 가져 오기, mocks, 테스트 도구 ...에 의존 할 수 있습니다. 옵션이 너무 많습니다.

1

CALL_API는 기호입니다. 객체를 console.log에 전달할 때 표시되지 않습니다. 객체의 키를보고 싶다면 Object.getOwnPropertySymbols(expectedAction)을 사용하거나 console.log(expectedAction[CALL_API])을 사용하면 해당 객체를 얻을 수 있습니다. (http://exploringjs.com/es6/ch_symbols.html)

올바르게 테스트하고 있습니다. 빈 객체를 사용한다면 일치하지 않을 것입니다. Symbol이 다른 객체를 사용하면 일치하지 않습니다.

0

이 문제가있는 사람은 redux-api-middleware의 {apiMiddleware}를 모의 상점에 추가해야합니다.