【问题标题】:Unit testing AWS Lambda that uses Layers - Node JS app使用层的单元测试 AWS Lambda - Node JS 应用程序
【发布时间】:2022-01-28 03:23:40
【问题描述】:

我有一个包含一堆 Lambda 函数和层的 SAM 应用程序,使用 Mocha/Chai 对各个函数运行单元测试。

问题是,我也在使用层来共享本地模块。

SAM项目结构是这样的..

函数/

  • 功能一/
    • app.js
    • package.json
  • 功能二/
    • app.js
    • package.json

层/

  • 第一层/
    • moduleA.js
    • moduleB.js
    • package.json
  • 第二层/
    • moduleC.js
    • package.json

一旦函数和层被部署,根据AWS,到require一个本地层从你使用这个路径的函数...

const moduleA = require('/opt/nodejs/moduleA');

但是,作为单元测试在本地运行不会解决任何问题。

关于在运行单元测试时如何解析层模块的路径有什么想法吗?

我可以设置一个 ENV 变量,然后基于它设置层的基本路径,但我想知道是否有更优雅的解决方案我错过了......

有没有办法在运行 Mocha 时给路径起别名?

其他选项是使用SAM INVOKE,但这会产生大量开销并且需要更多集成测试...

【问题讨论】:

  • 您能否添加您的function-one/package.json 的代码...我过去所做的是在dependencies 部分添加类似"moduleA": "file:../packages/layer/moduleA" 的内容,然后在您的代码中只需要不需要路径:const moduleA = require("moduleA")

标签: node.js amazon-web-services npm mocha.js aws-sam


【解决方案1】:

我改用支持模块映射的 Jest

在 package.json 中...

... 
"scripts": {
   "test": "jest"
},
"jest": {
    "moduleNameMapper": {
      "^/opt/nodejs/(.*)$": "<rootDir>/layers/common/$1"
    }
  }
...

【讨论】:

  • 摩卡不能做吗?
猜你喜欢
  • 2017-07-21
  • 2018-04-26
  • 2019-08-29
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多