Модульный тест для aws лямбда с использованием шутки - PullRequest
0 голосов
/ 25 марта 2020
const invokeApi = require("/opt/nodejs/kiwiCall");
const decrypt = require("/opt/nodejs/encryption");
const cors = require("/opt/nodejs/cors");

Когда я тестирую свой индекс. js файл вручную проверяет эти зависимости в каталоге mocks следующим образом:

__mocks__ 
    |_invokeApi
    |_decrypt
    |_cors

говорит:

FAIL  ./index.test.js
  ● Test suite failed to run

    Cannot find module '/opt/nodejs/kiwiCall' from 'index.js'

    However, Jest was able to find:
        '../../../../lambdas/Flights/Locations/index.js'

    You might want to include a file extension in your import, or update your 'moduleFileExtensions', which is currently ['js', 'json', 'jsx', 'ts', 'tsx', 'node'].

    See https://jestjs.io/docs/en/configuration#modulefileextensions-array-string

      1 | "use strict";
      2 | 
    > 3 | const invokeApi = require("/opt/nodejs/kiwiCall");

Хотел узнать, как можно смоделировать зависимости AWS лямбда в inedx.test. js file

1 Ответ

0 голосов
/ 16 апреля 2020

У меня почти такая же проблема. Я определил слой, который содержит общий код, который используется другими функциями в моем проекте. Моя структура проекта выглядит примерно так:

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

...