簡體   English   中英

使用 Jest 測試外部 Api 調用(使用獲取函數)

[英]Testing of external Api Calls using Jest (fetch function used)

我是 React/Redux 的新手,並且在官方 redux 文檔頁面上實現了一個基本示例。

需要一些關於如何測試以下功能的幫助,其中在普通 javascript 函數中調用外部 API,而我的動作創建者是調用該函數的人。

我如何使用 Jest 測試 API 調用和我的 action creator 函數?

這是存在的文件。

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

我搜索了上面的內容,但得到了各種選項,例如使用“nock”庫等。我很困惑哪種才是真正正確的測試方法。

我知道大約 4 年前就有人問過這個問題。 但它可能對將來會遇到某種情況的男孩和女孩有用。

測試外部的、不受自己控制的 API 是沒有意義的。 例如,您嘗試獲取 subreddits 列表並假設 API 調用返回給您一些列表。 您將此列表添加到您的測試文件並測試請求的結果是否與此列表相似。 突然之間,subreddits 列表發生了變化,現在它不等於您的“預期”JSON。 API 仍然可以正常工作,但測試失敗。

所以你唯一應該測試的是——你的方法如何處理調用的結果。 為此,您不應該進行真正的通話。 只需使用nock類的東西。

祝所有閱讀它的人好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM