用 Jest 模拟 Lerna 范围模块

Posted

技术标签:

【中文标题】用 Jest 模拟 Lerna 范围模块【英文标题】:Mock Lerna scoped module with Jest 【发布时间】:2021-12-04 18:01:41 【问题描述】:

我有一个使用 Lerna 的 monorepo 设置。项目使用 tsc 编译,测试使用 ts-jest v27 运行。

我正在尝试测试的其中一个文件包含以下代码:

import  someFunction  from '@local/package/dist/something'

const someLogic = () => 
  someFunction()

@local/package 是 Lerna 符号链接的本地 monorepo 包。

我需要模拟someFunction

我尝试过的事情:


jest.mock('@local/package/dist/something')

效果为零,仍调用原文件。


import * as something from '@local/package/dist/something'

jest.spyOn(something, 'someFunction')

零效应。


import * as something from '@local/package/dist/something'
something.someFunction = jest
      .fn()
      .mockReturnValue(123)

导致TypeError: Cannot set property "someFunction" of #<Object> which has only a getter


jest.config.js:


moduleNameMapper: 
    '(.*)something(.*)': '<rootDir>/src/somethingMock.js',
  

零效应。


我尝试在包含测试的包的 package.json 旁边创建“mocks/@local/package/dist/something.js”。 零效应。


我累了,需要帮助....我做错了什么?

【问题讨论】:

【参考方案1】:

这些是触发 HTTP 端点的端到端测试,我试图模拟的代码在单独的进程中运行,哈哈。

【讨论】:

以上是关于用 Jest 模拟 Lerna 范围模块的主要内容,如果未能解决你的问题,请参考以下文章

用 Jest 模拟 jsonwebtoken 模块

用 Jest 模拟基于承诺的请求

Jest - 在另一个模块函数中模拟函数

开玩笑 - 用“模拟”前缀模拟不起作用

跨测试重用 Jest 模块模拟

使用 Jest 模拟请求标头模块