模拟用于单元测试的 lambda 层库失败了

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

我正在尝试使用 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'
,但仍然不起作用。

我觉得这是一个你错过了一个非常小的细节的问题,知道如何解决这个问题吗?或者,还有另一种方法可以轻松地进行嘲笑吗?

unit-testing aws-lambda jestjs aws-lambda-layers
1个回答
0
投票

在我对

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)),
  },
}));
© www.soinside.com 2019 - 2024. All rights reserved.