似乎通過 axios 模擬對我不起作用,因為它似乎實作了模擬功能。我不知道為什么我不能模擬 axios。有人能指出我犯的錯誤嗎?過去 3 天我一直在嘗試這個。
索引.test.ts
從“axios”匯入axios;// 從節點模塊匯入 jest.mock("axios");
describe("compositeScore()", () => {
it("Mock Fetch API for Composite Score Response", async () => {
axios.post = jest.fn().mockResolvedValue(mockResponse);
const response = await dateFilter(platform);
expect(axios.post).toHaveBeenCalledTimes(1);
expect(response).toEqual(mockFetchCompositeScoreResponse);
});
});
索引.ts
export const dateFilters = async (platform) => {
const dates = await fetchWrapper(
platform.toLowerCase().concat("DateFilters"),
platform,
{}
);
return dates;
};
export async function fetchWrapper(
queryName: string,
platform: string,
queryParams?: {}
) {
const headers = {
Accept: "application/json",
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
};
const config: AxiosRequestConfig = {
method: "post",
url,
headers,
data: {
db: dbName,
csl: queryParams
? substituteQueryParameters(queries[queryName], queryParams)
: queries[queryName],
},
};
return axios(config);
}
我收到錯誤,因為預期的呼叫數量:1 收到的呼叫數量:0
還有 Received : undefined 和 expected 存盤模擬回應。
uj5u.com熱心網友回復:
由axios函式而不是axios.post方法發出的 HTTP 請求。
例如
index.ts:
import axios, { AxiosRequestConfig } from 'axios';
const token = '123';
const url = 'http://localhost:8080/api';
const dbName = 'arena';
export const dateFilters = async (platform) => {
return fetchWrapper(platform.toLowerCase().concat('DateFilters'), platform, {});
};
export async function fetchWrapper(queryName: string, platform: string, queryParams?: {}) {
const headers = {
Accept: 'application/json',
Authorization: `Bearer ${token}`,
'Content-Type': 'application/json',
};
const config: AxiosRequestConfig = { method: 'post', url, headers, data: { db: dbName, csl: queryParams } };
return axios(config);
}
index.test.ts:
import { dateFilters } from './';
import axios from 'axios';
jest.mock('axios');
const mAxios = axios as jest.MockedFunction<typeof axios>;
describe('71387289', () => {
test('should pass', async () => {
const mockResponse = { data: 'fake data', status: 200, statusText: 'ok', headers: {}, config: {} };
mAxios.mockResolvedValueOnce(mockResponse);
const platform = 'awesome';
const actual = await dateFilters(platform);
expect(axios).toHaveBeenCalledTimes(1);
expect(actual).toEqual(mockResponse);
});
});
測驗結果:
PASS stackoverflow/71387289/index.test.ts (7.78 s)
71387289
? should pass (4 ms)
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 100 | 100 | 100 | 100 |
index.ts | 100 | 100 | 100 | 100 |
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests: 1 passed, 1 total
Snapshots: 0 total
Time: 7.906 s, estimated 10 s
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/440122.html
上一篇:如何測驗并到達管道內的代碼部分
