TypeScript 无法识别我的笑话模拟模块

2024-01-12

假设我有一个index.ts这将导入Database.ts并运行一些查询。为了测试这个index.ts文件,我想模拟Database.ts因为我不想连接到任何真实的数据库。

这是我的index.ts:

import { connect } from './Database'

export async function runSomeQuery() {
  const connection = await connect()
  const result = await connection.query('SOME QUERY')
  return result
}

这是数据库的模拟(__mocks__/Database.ts)

const mockConnection = {
  query: jest.fn()
}

export const connect = jest.fn(
  () => Promise.resolve(mockConnection)
)

export function __getMockConnection() {
  return mockConnection
}

你可以看到我暴露了__getMockConnection这样我就可以得到mockConnection在我的测试中(index.spec.ts)(这个模式是从官方文档 https://jestjs.io/docs/en/manual-mocks):

import { connect, __getMockConnection } from '../Database'
//                ^^^^ getting type error here 
import { runSomeQuery } from '../index'

jest.mock('../Database')

test('runSomeQuery', async () => {
  await runSomeQuery()
  const mockConnection = __getMockConnection()
  expect(connect).toBeCalled()
  expect(mockConnection.query).toBeCalledWith('SOME QUERY')
  expect(mockConnection.query).toBeCalledWith('SOME QUERY')
})

测试用例确实按预期通过,但我收到此 TypeScript 错误

Module '"/project/path/Database"' has no exported member '__getMockConnection'. [2305]

TypeScript 不知道我正在导入Database来自模拟。同样出于这个原因,我必须禁用 ts-jest 的诊断,它抱怨同样的问题。

我该如何解决这个问题?将导入路径更改为'../__mocks__/Database'不起作用。

这是回购协议:https://github.com/CodinCat/ts-jest-mock-issue https://github.com/CodinCat/ts-jest-mock-issue

Open __tests__/index.spec.ts使用支持 TypeScript(如 VS Code)的编辑器,您将看到错误。


由于打字稿不知道jest模拟,只要您的模拟与实际代码不同,您就需要手动类型转换:

import * as MockDatabase from "../__mocks__/Database";
import * as Database from "../Database";

import { runSomeQuery } from "../index";
jest.mock("../Database");

// Type cast since Database is automatically mocked by jest
const { connect, __getMockConnection } = Database as typeof MockDatabase;

test("runSomeQuery", async () => {
  await runSomeQuery();
  const mockConnection = __getMockConnection();
  expect(connect).toBeCalled();
  expect(mockConnection.query).toBeCalledWith("SOME QUERY");
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript 无法识别我的笑话模拟模块 的相关文章

  • 使用带有十六进制字符串的 CryptoJS

    我想连接到蓝牙设备 仅通过十六进制字符串进行通信 我需要编码一个 16 字节值 因此我也期望一个 16 字节的值 在我的实现中 CryptoJS 总是返回更长的结果 根据文档 不需要 IV 所有 16 字节数据必须使用当前存储在设备中的客户
  • 如何在 Next.js 中正确使用 Mongoose 模型?

    我正在使用 TypeScript 和 MongoDB Mongoose 构建 Next js 应用程序 我在使用 Mongoose 模型时开始遇到错误 这导致它们在每次使用模型时都尝试覆盖模型 导致模型覆盖错误的代码 import mong
  • 在 Angular 上开发时无法自动完成和自动导入

    我已经在 Windows 上安装了最新的 VSCode 然后我安装了 languaje 对 TypeScript 的支持 最后 设置一些编辑器选项并安装一些扩展 编辑器配置 editor fontSize 12 editor minimap
  • 模块转换为 Typescript 后没有默认导出

    我已将 JavaScript 代码转换为 Typescript 并收到错误 模块没有默认导出 我尝试过使用花括号导入并使用 module exports 导出 但它们都不起作用 contactController ts const cont
  • 使用 jest 测试 catch 块

    我如何测试下面我使用类的代码片段中的 catch 块 示例 js class Sample constructor data this resolvedData this retrieveData data retrieveData dat
  • Typescript:如何在 Redux 中输入 Dispatch

    例如我想删除dispatch any here export const fetchAllAssets gt dispatch any gt dispatch actionGetAllAssets return fetchAll getPr
  • For 循环覆盖 HTML 中的文本

    我的数组称为myEmployees其中有 5 个名字 但当我运行代码时 它只打印出其中的 3 个 我相信这种情况正在发生 因为for脚本中的循环会覆盖它在 HTML 文档中编写的前一行 我怎样才能解决这个问题 年度公告板公告 恭喜泰勒 你在
  • 如何让MagicMock返回多个值

    我想模拟一个图书馆 matplotlib对于它的价值 并且遇到一个问题 当调用模拟并期望返回元组时 它会失败 有一个更好的方法吗 Python 3 7 2 default Jan 13 2019 12 50 15 Clang 10 0 0
  • 获取类的公共属性而不创建它的实例?

    假设我们有一个 JavaScript 类 var Person function function Person name surname this name name this surname surname Person prototy
  • NativeScript:增强 tns-platform-declarations

    在我的 NativeScript 项目中我想包括RecyclerView来自 Android 支持库 我将依赖项包含在app App Resources Android app gradle Uncomment to add recycle
  • Typescript 从传递的函数返回类型推断返回类型

    我可能正在尝试实现不可能的目标 但事情就这样了 我想定义一个函数 function A 它将返回与传递给函数 A 的参数的新函数相同的类型 e g export function test
  • Material UI 选择覆盖主题中的位置

    我想覆盖主题中选择字段下拉列表的位置 不必在每个选择上实现它 我尝试过 createMuiTheme overrides MuiSelect select MenuProps getContentAnchorEl null anchorOr
  • Typescript 数组文字语法的差异

    Typescript 允许使用以下任一语法定义数组 var myStrArry1 string or var myStrArry1 Array
  • 在 Nest.js 中发送之前如何格式化响应?

    我按照文档进行操作 并能够添加用于响应映射的拦截器 我想要一致的 json 格式输出作为响应 我怎样才能用拦截器或其他比这种方法更好的方法来实现这一点 statusCode 201 message Custom Dynamic Messag
  • TypeScript 中 C# 类虚拟成员的等效项

    因此 在 C 中 当我创建模型类和延迟加载内容时 我会执行以下操作 public int User ID get set public int Dept ID get set 然后在我的班级稍远一点的地方 我像这样弹出我的虚拟 public
  • 在 Angular 中导入和使用 lodash 的正确方法

    我曾经能够通过如下所示的 import 语句在 Angular 中使用 lodash 方法 import debounce as debounce from lodash 我现在在使用该语句时收到以下错误 node modules type
  • 检查用户是否已从 Node.js(云功能)登录 Firebase Auth

    我正在尝试在 Node js 上创建 Express 动态网页 我想在路径上的服务器 Firebase Cloud Functions 上执行以下逻辑 如果客户端已登录 Firebase Auth 则呈现主页my home page htm
  • Angular 中的动态子组件

    我正在构建一个具有一致的元素列表设计模式的应用程序 如果我有一个 A 类型的对象 我会创建AComponent它接受a作为输入 然后创建另一个组件来迭代 A 列表 AListComponent 那么如果我有一个对象 B 我需要做同样的事情
  • 如何在 Angular4 中上传相同的文件

    我能够成功上传文件 但现在的问题是它不允许我两次上传同一文件 这是我的代码
  • Visual Studio 2015/2017 中的 TSLint?

    我的组织使用TSLint https github com palantir tslint 我们非常重视 Typescript 代码的质量检查 它为我们提供了有价值的服务 然而 我们使用 Visual Studio 2015 和 2017

随机推荐