2017-04-25 5 views
2

Ich bin neu in React/Redux und habe ein grundlegendes Beispiel implementiert, das auf der offiziellen redux-Dokumentationsseite verfügbar ist.Testen von externen Api-Aufrufen mit Jest (Abruffunktion verwendet)

Benötigen Sie Hilfe, wie ich die folgende Funktionalität testen kann, wo in einer einfachen JavaScript-Funktion eine externe API aufgerufen wird und mein Aktionsersteller derjenige ist, der diese Funktion aufruft.

Wie teste ich den API-Aufruf und meine Aktion Creator-Funktion mit Jest ??

Hier sind die Dateien, die vorhanden sind.

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)) 
 
     } 
 
    } 
 
}

Ich habe auf die oben genannte Sache gesucht, aber bekam Bibliothek verschiedene Optionen, wie mit ‚Nock‘ usw. bin ich sehr verwirrt, auf das der tatsächlichen richtige Weg, es zu testen.

Antwort

Verwandte Themen