2016-10-12 13 views
0

私はAPIに対する非同期呼び出しを持つreduxアクションを持っています。還元アクションにsinonを使用してクロージャ関数をスタブします

import { ForbiddenRequest, APIError } from "../errors" 
import { fetchActionCreator } from "redux-fetch-helpers" 

export const ADD_CART_ITEMS = "ADD_CART_ITEMS" 

export default function addCartItems(items, authToken){ 
    return fetchActionCreator({ 
     url: `${API_BASE}/ajax_cart`, //eslint-disable-line no-undef 
     fetchOptions: { 
      method: "POST", 
      headers: new Headers({ 
       "Authorization": `jwt ${authToken}`, 
       "Accept": "application/json", 
       "Content-Type": "application/json", 
      }), 
      body: JSON.stringify(items), 
      credentials: "same-origin", 
     }, 
     actionType: ADD_CART_ITEMS, 
     responseConfig: { 
      200: (resp => resp), 
      403: (payload => new ForbiddenRequest(payload)), 
      other: (payload => new APIError(payload)), 
     } 
    }) 
}

私はsinonスタブを使用してfetchActionCreator方法を模擬しようとしています。 これは私のspecファイルである

 
import addCartItems from "../../actions/addCartItems" 
import sinon from "sinon" 

describe("The addCartItems action",() => { 
    let fetchActionCreator 
    it("should create an action to add an item into the cart",() => { 
     const addedCartItem = { 
      items: [{product_variant: 10, quantity: 1}] 
     } 
     const expectedAction = { type: "ADD_CART_ITEMS", meta: {sequence: "BEGIN"}} 
     fetchActionCreator = sinon.stub() 
     // fetchActionCreator() 
     fetchActionCreator.returns(expectedAction) 
     expect(addCartItems(addedCartItem, "someToken")).to.equal(expectedAction) 
    }) 

})

しかし、何とか機能が嘲笑取得されていません。あなたは私に正しい方法を提案できますか?

答えて

2

同じ名前のスタブを作成するだけでなく、呼び出されるライブラリから実際の関数をスタブする必要があります。

あなたのテストであなたの輸入に以下を追加します。

import * as reduxFetchHelpers from 'redux-fetch-helpers'; 

次に、あなたのテストの本体に、とあなたの現在のスタブコードを置き換える:私はこのコードをテストしていない

const fetchActionCreator = sinon.stub(reduxFetchHelpers, 'fetchActionCreator'); 
fetchActionCreator.returns(expectedAction); 

が、それはうまくいくように見えます。

関連する問題