jest.mock 不适用于 Javascript 测试和 Typescript 模块

mow*_*ker 4 javascript typescript jestjs ts-jest

我的模拟utilFunction没有被使用,并且向工厂函数添加日志记录表明它从未被调用。我已经尝试过搜索 jest.mock 不使用相对路径,并且 jest.mock 没有被 Typescript 调用,认为它可能与 JS 测试和 TS 源代码的混合或源中使用的不同模块路径有关与测试代码。

正在测试的代码:

// src/foo/fooModule.ts
import { utilFunction } from '../util'

export const foo = () => {
  return utilFunction()
}
Run Code Online (Sandbox Code Playgroud)

测试代码:

// test/fooModule.test.js
const { foo } = require('../src/foo/fooModule')

jest.mock('../src/util', () => {
  return { utilFunction: () => 'mocked' };
});

describe('fooModule tests', () => ...)
Run Code Online (Sandbox Code Playgroud)

mow*_*ker 10

jest.mock调用需要移至导入上方:

// test/fooModule.test.js
jest.mock('../src/util', () => {
  return { utilFunction: () => 'mocked' };
});

const { foo } = require('../src/foo/fooModule')


describe('fooModule tests', () => ...)
Run Code Online (Sandbox Code Playgroud)

在此之前,我最后一次使用 Jest 的经历是在一个项目中,其中的测试也是用 Typescript 编写并babel-jest使用的。babel-jest包括babel-jest-hoist ,它会自动将笑话模拟提升到任何导入之上,所以我以前不必担心排序。