繁体   English   中英

如何开玩笑地嘲笑咖喱 function?

[英]How to mock a curried function in jest?

我一直遇到一个问题,根据开玩笑,我的一个柯里化函数不是 function。 我在一个名为 httpRequest.js 的文件中创建了一组实用的 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,
};

当我在测试中模拟这个文件然后使用 function 例如preBuiltGetRequest ,我开玩笑说TypeError: preBuiltGetRequest(...) is not a function 这是一个实现的例子。

这是我正在测试的代码库中的 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 中运行测试代码 mocking 时:

jest.mock('/opt/httpRequest');

const { preBuiltGetRequest } = require('/opt/httpRequest');

我收到此错误: 截图错误

preBuiltGetRequest function 的签名可以输入为

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM