我正在尝试使用 jest 对我的 lambda 进行单元测试。在 lambda 代码中,我们有一行代码依赖于位于 lambda 层中的包。
import { logger } from 'opt/nodejs/logger';
...
logger.debug('a message');
错误是:
TypeError: Cannot read properties of undefined (reading 'debug')
基于jest文档,属性
moduleNameMapper
是能够模拟库的方法,但它对我不起作用。
我有这个文件夹结构:
lambda 层包含 lib 文件夹。
这就是
jest.config.js
的内容
/** @type {import('ts-jest').JestConfigWithTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
modulePaths: ['node_modules', '.'],
moduleNameMapper: {
'^opt/nodejs/logger$': '<rootDir>/../lib/src/logger.ts',
},
}
我还尝试输入绝对路径(类似于
/User/.../lib/src/logger.ts
)和'^opt/nodejs/(.*)$': '<rootDir>/../lib/src//$1'
,但仍然不起作用。
我觉得这是一个你错过了一个非常小的细节的问题,知道如何解决这个问题吗?或者,还有另一种方法可以轻松地进行嘲笑吗?
在我对
jest.config.js
中的配置进行了足够的尝试之后,我转而尝试使用 jest.mock()
并且我使用以下方法让它工作:
jest.mock('opt/nodejs/logger', () => ({
logger: {
debug: jest.fn((msg: string) => console.log('debug message: ', msg)),
info: jest.fn((msg: string) => console.log('info message: ', msg)),
error: jest.fn((msg: string) => console.log('error message: ', msg)),
warn: jest.fn((msg: string) => console.log('warning message: ', msg)),
},
}));