我一直遇到一個問題,即我的一個 curried 函式在根據 jest 模擬出來時不是一個函式。我在一個名為 httpRequest.js 的檔案中創建了一組 util httpRequest 函式,如下所示:
const httpRequest = (method) => {
return (headers) => {
return (data) => {
return async (url) => {
try {
const result = await axios({ method, url, data, headers });
const { data: axiosResult } = result;
return axiosResult;
} catch (err) {
console.log(`${method}Data: `, err);
throw err;
}
};
};
};
};
const getData = httpRequest('get')()();
const postData = httpRequest('post')();
const putData = httpRequest('put')();
const patchData = httpRequest('patch')();
const deleteData = httpRequest('delete')()();
const preBuiltGetRequest = httpRequest('get');
const preBuiltPostRequest = httpRequest('post');
const preBuiltPutRequest = httpRequest('put');
const preBuiltPatchRequest = httpRequest('patch');
const preBuiltDeleteRequest = httpRequest('delete');
module.exports = {
httpRequest,
getData,
postData,
putData,
patchData,
deleteData,
preBuiltGetRequest,
preBuiltPostRequest,
preBuiltPutRequest,
preBuiltPatchRequest,
preBuiltDeleteRequest,
};
當我在測驗中模擬出這個檔案然后使用一個函式時,比如preBuiltGetRequest我在開玩笑時得到一個錯誤TypeError: preBuiltGetRequest(...) is not a function。這是一個實作的例子。
這是我正在測驗的代碼庫中的函式:
queryUser: async (accessToken, email) => {
const query = `
{
getUsersByCriteria(criteria: Email, values: "${email}") {
id
groups {
id
name
entitlements {
id
code
}
members {
total
}
}
}
}
`;
const newUrl = new URL(`${BaseUrl}/v3/graphql`);
newUrl.searchParams.append('query', papiQuery);
console.log('From the Api ', preBuiltGetRequest);
const getAuthenticatedData = preBuiltGetRequest({
Authorization: `Bearer ${accessToken}`,
})();
const response = await getAuthenticatedData(newUrl.toString());
const graphQlResult = response.data?.getUsersByCriteria;
if (!graphQlResult || graphQlResult.length === 0) {
throw new Error(`Could not find user with email=${email}`);
}
return graphQlResult[0];
},
然后,當我使用以下代碼運行模擬 preBuiltGetRequest 的測驗代碼時:
jest.mock('/opt/httpRequest');
const { preBuiltGetRequest } = require('/opt/httpRequest');
我收到此錯誤:

uj5u.com熱心網友回復:
該preBuiltGetRequest函式有一個簽名,可以輸入為
declare const prebuiltGetRequest: (header: object) => (data: object) => (url: String) => Promise<never>;
你需要相應地模擬它,
jest.mock('/opt/httpRequest');
const { preBuiltGetRequest } = require('/opt/httpRequest');
const mockSig = jest.fn().mockReturnValue(
jest.fn().mockResolvedValueOnce(error)
)
preBuiltGetRequest.mockReturnValue(mockSig)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/463899.html
標籤:javascript 单元测试 测试 开玩笑的
