2017-04-25 6 views
2

私はReact/Reduxを初めて使用しており、公式のreduxドキュメントページで入手可能な基本的な例を実装しています。Jest(使用される取得機能)を使用した外部Apiコールのテスト

普通のjavascript関数で外部APIを呼び出し、その作成者がその関数を呼び出すアクションクリエイターである場合、次の機能をテストするにはいくつかの助けが必要です。

Jestを使用してAPI呼び出しとアクション作成者関数をテストするにはどうすればよいですか?

ここにはファイルがあります。

import fetch from 'isomorphic-fetch' 
 

 
export const REQUESTS_POSTS ='REQUESTS_POSTS'; 
 
export const RECEIVE_POSTS ='RECEIVE_POSTS'; 
 
export const SELECT_SUBREDDIT ='SELECT_SUBREDDIT'; 
 
export const INVALIDATE_SUBREDDIT ='INVALIDATE_SUBREDDIT'; 
 

 
export function selectSubreddit(subreddit) { 
 
    return{ 
 
     type:SELECT_SUBREDDIT, 
 
     subreddit 
 
    } 
 
} 
 

 
export function invalidateSubreddit(subreddit) { 
 
    return{ 
 
     type:INVALIDATE_SUBREDDIT, 
 
     subreddit 
 
    } 
 
} 
 

 
function requestsPosts(subreddit) { 
 
    return{ 
 
     type:REQUESTS_POSTS, 
 
     subreddit 
 
    } 
 
} 
 

 
function receivePosts(subreddit, json) { 
 
    return{ 
 
     type:RECEIVE_POSTS, 
 
     subreddit, 
 
     posts:json.data.children.map(child=>child.data), 
 
     receiveAt:Date.now() 
 
    } 
 
} 
 

 
function fetchPosts(subreddit) { 
 
    return dispatch=>{ 
 
     dispatch(requestsPosts(subreddit)); 
 
     return fetch(`https://www.reddit.com/r/${subreddit}.json`) 
 
      .then(response=>response.json()) 
 
      .then(json=>dispatch(receivePosts(subreddit,json))) 
 
    } 
 
} 
 

 
function shouldFetchPosts(state, subreddit) { 
 
    const posts = state.postsBySubreddit[subreddit]; 
 
    if(!posts){ 
 
     return true; 
 
    }else if(posts.isFetching){ 
 
     return false; 
 
    }else{ 
 
     return posts.didInvalidate 
 
    } 
 
    
 
} 
 

 
export function fetchPostsIfNeeded(subreddit) { 
 
    return (dispatch, getState) => { 
 
     if(shouldFetchPosts(getState(),subreddit)){ 
 
      return dispatch(fetchPosts(subreddit)) 
 
     } 
 
    } 
 
}

私は上記のことで検索が、それをテストするために、実際の正しい方法である上など、「ノック」ライブラリを使用してのような様々なオプション、私は非常に混乱していますを持っています。

答えて

関連する問題