發(fā)布于:2021-02-02 15:10:23
0
1741
0
假設(shè)我們有一個簡單的異步函數(shù),它調(diào)用一些遠程數(shù)據(jù)。我們傳入查詢和配置對象。要查看可通過此請求配置傳遞的內(nèi)容的示例,請參閱Axios文檔。在本例中,我的查詢只是配置中的url
鍵,例如/user
,它可能是一個API端點。此函數(shù)僅返回來自axios(端點的實際響應(yīng)主體)的數(shù)據(jù)。如果我們無法從端點得到響應(yīng),函數(shù)將捕獲并拋出一個控制臺錯誤。
request.js
export const fetchData = async (query, config
) => {
try {
const { data } = await axios.request({
method: 'get',
url: encodeURI(query),
...config
});
return data;
} catch (e) {
console.error('Could not fetchData', e);
}
};
現(xiàn)在讓我們創(chuàng)建一個新文件request.spec.js
我們要添加兩個導(dǎo)入
import mockAxios from 'axios';
import { fetchData } from '../request';
為了測試這一點,我們需要使用Axios的模擬版本,該版本可以方便地從核心庫導(dǎo)入。我們現(xiàn)在準備編寫測試
it('should call a fetchData function', done => {
fetchData('/test', {}).then(response => {
expect(response).toEqual({
data: {},
});
});
expect(mockAxios.request).toHaveBeenCalledWith({
method: 'get',
url: '/test'
});
expect(mockAxios.request).toHaveBeenCalledTimes(1);
expect(consoleErrorSpy).not.toHaveBeenCalled();
done();
});
首先我們用一個測試查詢和一個空配置調(diào)用then函數(shù),以確保然后測試我們的響應(yīng)是正確的?,F(xiàn)在我們正在測試mockAxios.request
是否用我們期望的參數(shù)調(diào)用了它,是否只調(diào)用了一次,是否我們的函數(shù)沒有拋出錯誤。最后,我們調(diào)用done()
回調(diào),它讓我們知道異步操作已經(jīng)完成。