unit-testing - 没有应用模拟和间谍
问题描述
我有一个功能测试,可确保我的一个 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)
解决方案
推荐阅读
- python - 为什么 dataframe.plot 的错误栏不显示?
- amazon-web-services - 为了不被 AWS 收费,我应该删除哪些 IAM 角色和策略?
- go - 使用 Jetbrains GoLand IDE 运行简单的应用程序
- node.js - 即使我在 Google App Engine 中设置了 {"type": "module"},也会出现“无法在模块外使用 import 语句”错误
- javascript - Blazor WASM Cookie 同意触发器 javascript
- ms-access - 安静地压缩 Access 文件
- php - 如何从单表 Laravel 中计算嵌套子级
- azure - 使用事件网格、函数和服务总线维护正确的顺序
- excel - 创建受保护的副本时使用密码隐藏不同范围的列
- django - ckeditor - 用户友好的图像上传