У меня почти такая же проблема. Я определил слой, который содержит общий код, который используется другими функциями в моем проекте. Моя структура проекта выглядит примерно так:
project/
functions/
function1/
app.js
function2/
app.js
shared/
shared.js
Я импортирую свою общую библиотеку следующим образом:
const { doSomething } = require('/opt/shared');
exports.handler = async (event) => {
const result = await doSomething();
// etc...
return {statusCode: 200};
}
Это работает, когда я развертываюсь в AWS Lambda, потому что существует /opt/shared
и на него можно сослаться правильно. Это также работает, если я запускаю это на своей машине, используя sam local invoke Function1
, потому что он работает в контейнере, что делает код доступным /opt/shared
.
Однако я изо всех сил пытаюсь понять, как я могу издеваться эта зависимость в модульном тесте. Если я просто сделаю это: jest.mock('/opt/shared')
, я получу: Cannot find module '/opt/shared' from app.test.js