单元测试模拟 - Node 17 + typescript + ESM 模块

问题描述 投票:0回答:1

有一个简单的问题我找不到答案。 使用时:

  1. 节点 17 + 打字稿
  2. ESM(package.json 中的“类型”:“模块”)

我可以只为一个函数实现mock吗?还是模块?

如果是这样,我可以举个例子吗? 无论您使用什么框架。

谢谢!!

package.json:

{
    "test": "node --experimental-vm-modules  ./node_modules/.bin/jest --bail --colors --coverage --detectOpenHandles --forceExit --verbose",

    "jest": {
        "preset": "ts-jest/presets/default-esm",
        "transform": {
            ".ts": "ts-jest"
        },
        "testEnvironment": "node",
        "moduleFileExtensions": [
            "ts",
            "js",
            "json"
        ],
        "transformIgnorePatterns": [
            "<rootDir>/node_modules/"
        ],
        "globals": {
            "ts-jest": {
                "useESM": true
            }
        }
    }
}

Jest.spy 给了我一个错误:无法分配给只读属性我也尝试使用 Sinon,结果是:es 模块无法被存根

jestjs mocking sinon es6-modules
1个回答
0
投票

我推荐

vitest

我刚刚尝试了很多选项,例如 uvu 和 esmock。什么都没起作用。

vitest
有适当的文档并且开箱即用。可以随时模拟来自不同 ESM 模块的功能(提升)。它只是有效。

一开始我并不想使用商业项目的产品。但所有其他选项都有效。

vitest
语法与笑话中的完全相同。

import { ALL_EMB_TYPES } from "./db.js"

vi.mock("./db.js", async () => {
  let actual = await vi.importActual("./db.js") as any
  return {
    ...actual,
    store: vi.fn(),
  }
})

// ALL_EMB_TYPES retained from original implementation
// store mocked

© www.soinside.com 2019 - 2024. All rights reserved.