首页 > 解决方案 > 没有应用模拟和间谍

问题描述

我有一个功能测试,可确保我的一个 API 的工作代码。该代码的一部分向外部 API 发出请求。我希望该调用被模拟,但是,我已经尝试了几乎所有可以在网上找到的用于实现模拟的解决方案,但它似乎总是被调用。

在测试中:

const vendorOneOperations = require('~/server/vendor/vendorOne/operations');

jest.mock('~/server/vendor/vendorOne/operations', () => ({
  ...(jest.requireActual('~/server/vendor/vendorOne/operations') as object),
  listItems: jest.fn().mockReturnValue({ results: [] }),
}));

在正在测试的服务中:

import * as vendorOne from '~/server/vendor/vendorOne';

const { results: items } = await vendorOne.operations.listItems(itemIds);
console.log('ITEMS: ', items);

~/server/vendor/vendorOne/index.ts

export { default as client, getValidToken } from './client';
export * as schema from './schema';
export * as operations from './operations';
export * as constants from './constants';

~/server/vendor/vendorOne/operations/index.ts

...
export { default as listItems } from './listItems';
...

~/server/vendor/vendorOne/operations/listItems.ts

import qs from 'query-string';
import { operation } from './abstract';

export default operation({
  method: 'get',
  path: '/api/items',
  config: (ids: string[]) => ({
    params: { item_ids: ids },
    paramsSerializer: (params) => qs.stringify(params, { arrayFormat: 'none' }),
  })
});

运行测试时,我看到:

  console.log
    ITEMS: [
      ... // actual items from API 
    ]

      at getItems (src/server/services/vendorService/common/getItems.ts:37:11)

标签: unit-testingjestjsmockingspy

解决方案


推荐阅读