Typescript Jest 说我想要模拟的类型上不存在模拟或模拟返回值

2024-01-03

这是我想测试的一个类:

//Request.js
import axios, {AxiosInstance} from 'axios';
import config from './config';

const axiosSingleton: AxiosInstance = axios.create({
  baseURL: 'http://localhost:8080',
});

export default class Request {
  public async get<$ResponseType = any>(url: string): Promise<void> {
    const response = await axiosSingleton.get(url);
    return response.data;
  }
}

当我尝试通过创建测试文件来测试这一点时,我不确定如何模拟 axios。我尝试了很多方法,包括间谍和自动模拟。但它们似乎不起作用。这是测试文件的一个版本,我不明白为什么它不起作用

// Request.test.js
import axios from 'axios';
import Request from './Request';

interface ITestResponseDataType {
  value: string
}

jest.mock('axios');

describe('Request Tests', () => {
  it('should call axios get with the right relativeUrl', async () => {
    const getMock = jest.fn();

    axios.create.mockReturnValue({
      get: getMock
    });

    getMock.mockResolvedValue({
      value: 'value'
    });

    const data = await new Request().get<ITestResponseDataType>('/testUrl');
    expect(getMock.mock.calls.length).toEqual(1);
    expect(data).toEqual({
      value: 'value'
    });
  });
});

当我尝试运行测试时出现的错误是 -

 TypeScript diagnostics (customize using `[jest-config].globals.ts-jest.diagnostics` option):
    src/common/api/Request.test.ts:15:18 - error TS2339: Property 'mockReturnValue' does not exist on type '(config?: AxiosRequestConfig | undefined) => AxiosInstance'.

    15     axios.create.mockReturnValue({

这个错误是有道理的,因为 axios 中为 axios.create 定义的类型不应该允许在 .create 上调用 .mockReturnValue。那么我如何告诉 typescript jest 已经进入并修改了它呢?


将模拟方法转换为jest.Mock, ie

import axios from "axios"
import Request from "./Request";

// Create an Axios mock
// Don't worry about the order, Jest will hoist this above the imports
// See https://jestjs.io/docs/manual-mocks#using-with-es-module-imports
jest.mock("axios", () => ({
  create: jest.fn()
}))

// Customise the `create` mock method
(axios.create as jest.Mock).mockReturnValue({
  get: getMock
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Typescript Jest 说我想要模拟的类型上不存在模拟或模拟返回值 的相关文章

随机推荐

  • 查询日期和价格数据的矢量化方式

    问题 概述 我正在寻找一种矢量化方法来获取看到特定条件的第一个日期 当价格处于dfDays is gt 中指定的目标价格dfWeeks target 必须在设定目标的日期之后满足此条件 有没有办法进行以下时间序列分析apply或者类似的 在
  • 仅为 Swing 中的特定目标启用放置

    我正在尝试用两个在java中实现拖放JList实例 基本流程运行良好 但是 当我从一个列表中拖动字符串时 我想将放置目标限制为仅适用于第二个列表 我注意到 当我将一个字符串从一个列表拖动到桌面时 它会创建一个包含该字符串的文件 有什么办法可
  • 如何更改 Visual Studio 2010 工具提示的背景或前景色

    当您在不调试时将鼠标悬停在代码项上时 我需要更改 Visual Studio 2010 中的工具提示 显然我试图将我的 VS 主题设置为黑暗 但我似乎无法更改此设置 我安装了 Powertools Visual Assist X 和颜色主题
  • 如何处理具有实体关系的 Spring Boot/Spring Data 投影(嵌套投影)

    我正在尝试让嵌套投影在 Spring Boot 中工作 我有 2 个实体 Parent and Child 然而Parent有一个单向的 OneToMany与 的关系Child 以下是这些类 使用 Lombok Annotations En
  • 当元素相等时 Array.sort() 会产生意外结果?

    Heyo 我正在尝试对有时可能完全相等的数组进行排序 当数组不相等时 该函数可以完美运行 但当数组完全相等时 该函数似乎会随机放置元素 例如 我希望下面的代码打印 a b c 但得到的结果是 k a c d 这是 sort 函数的预期行为吗
  • 具有动态尺寸的全圆形按钮

    我正在尝试在 CSS 中创建圆形按钮 我用border radius 100 使按钮看起来像一个圆圈 但只有当我明确设置元素的宽度和高度时它才有效 但如果我这样做 按钮将不会调整以修复较大的文本 这是我到目前为止所尝试过的 round bu
  • 使用C代码查找文件的inode号

    我有程序 名称为 GiverootAccess 该程序可以接收当前目录 giverootAccess 所在目录 中的文件名作为命令行参数 然后该文件将获得 root 访问权限 该文件可以是可执行文件或 shell 脚本 现在的问题是 黑客可
  • Resources.getIdentifier(),deftype 参数的可能值?

    我正在尝试了解一个对投资组合执行计算的 Android 应用程序 投资组合存储在res values portfolio xml 当按下应用程序中的按钮时 将按如下方式检索投资组合数据 String portfolioName TextVi
  • 从 Angular 工厂中的 HTTP 返回响应数据

    factory Api function http var API http 127 0 0 1 4567 return get function method return http get API method success func
  • 如何在 WPF 中将控件标记为“私有”?

    对于 WinForms 程序 我已经习惯将控件的 Modifiers 属性标记为 私有 以防止外部类和其他任何您能够看到和弄乱它们的东西 由于 WPF 还很陌生 我在 WPF 中看不到明显的等效项 因此外部类无法看到我放到表单或另一个用户控
  • RegisterStartupScript和执行顺序

    我在用ScriptManager RegisterStartupScript注册对大量JS函数的调用 ScriptManager RegisterStartupScript this this GetType Script1 SomeScr
  • 字符串文字的地址长度

    我发现在带有 GCC 的 Linux 系统上 字符串文字的地址似乎比其他变量小得多 例如 以下代码生成下面所示的 o p include
  • 我可以在 Swift 代码中运行 JavaScript 吗?

    我需要在 Swift 代码中包含 JavaScript 代码才能调用 signalR 聊天 这可能吗 如果没有的话我可以转换吗 sendmessage是一个按钮 function Declare a proxy to reference t
  • 德沃夏克打字机,你们如何处理像 Ctrl-C 这样的快捷键?

    您是否将操作系统中的键绑定更改为 Ctrl Q 你能把左手伸到C键上吗 您是否使用右手 ctrl 并用右手按快捷键 When I switched to Dvorak I was using primarily Ctrl Ins and S
  • 无法使用统一初始化复制 std::vector> 。它是否正确?

    以下代码无法在 GCC 4 7 2 或 Clang 3 2 中编译 include
  • htaccess - 禁止直接访问除登录用户之外的所有文件 (PHP)

    使用 htacess 拒绝所有 是否可以只允许登录我的系统的用户直接访问文件 如果有什么区别的话 我的网站是用 Drupal PHP 构建的 如果这是可能的 那么理想情况下我也想检查用户的角色 你不能这样做 htaccess独自的 你需要做
  • Visual Studio 2013隐藏构建进度窗口

    在 Visual Studio 2013 社区中 每次构建时 都会出现一个构建进度窗口 并在构建完成后消失 是否有一个选项可以隐藏而不显示该窗口 谢谢 该窗口是由 CodeMaid 扩展生成的 要禁用它 请打开 Codemaid 的配置 然
  • 如何根据动态改变背景颜色来动态改变文本颜色

    我正在建立一个新网站 需要我的文本根据不断变化的背景颜色改变颜色以保持对比度 我在网上搜索了不涉及 Sass 的答案 但没有一个有效 我尝试过一些 JavaScript 但它们仅在背景是您手动更改的固定颜色时才起作用 我当前的文件 http
  • ASP.NET 2.0 中的 Gridview 列宽度

    如何控制 ASP NET 2 0 中 gridview 控件的列宽 您可以使用 HeaderStyle Width ItemStyle Width 或 FooterStyle Width 属性 这些可以应用于所有列或每列
  • Typescript Jest 说我想要模拟的类型上不存在模拟或模拟返回值

    这是我想测试的一个类 Request js import axios AxiosInstance from axios import config from config const axiosSingleton AxiosInstance