{"id":16992073,"url":"https://github.com/paulogoncalvesbh/lambda-unit-test","last_synced_at":"2025-09-04T07:18:18.156Z","repository":{"id":38748553,"uuid":"420758600","full_name":"PauloGoncalvesBH/lambda-unit-test","owner":"PauloGoncalvesBH","description":"Demonstration of unit testing implementation in Serverless application using the 'lambda-tester' library","archived":false,"fork":false,"pushed_at":"2024-04-27T14:27:02.000Z","size":225,"stargazers_count":69,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-27T03:06:28.285Z","etag":null,"topics":["lambda-tester","serverless","unit-testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PauloGoncalvesBH.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-10-24T18:07:54.000Z","updated_at":"2024-12-14T23:03:57.000Z","dependencies_parsed_at":"2024-10-26T21:20:41.504Z","dependency_job_id":"a40661a2-8a9a-4610-9ecc-0f204b1ef1cf","html_url":"https://github.com/PauloGoncalvesBH/lambda-unit-test","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PauloGoncalvesBH%2Flambda-unit-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PauloGoncalvesBH%2Flambda-unit-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PauloGoncalvesBH%2Flambda-unit-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PauloGoncalvesBH%2Flambda-unit-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PauloGoncalvesBH","download_url":"https://codeload.github.com/PauloGoncalvesBH/lambda-unit-test/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243742627,"owners_count":20340676,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["lambda-tester","serverless","unit-testing"],"created_at":"2024-10-14T03:28:12.676Z","updated_at":"2025-03-15T14:30:43.648Z","avatar_url":"https://github.com/PauloGoncalvesBH.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n  \u003ch1\u003eTeste unitário em aplicação Serverless\u003c/h1\u003e\n  \u003cb\u003e\u003ci\u003eDeixe uma star ⭐ no repositório, isso me incentiva a criar conteúdo de qualidade de software 100% gratuito\u003c/i\u003e\u003c/b\u003e\n  \u003cbr\u003e\n  \u003ch4\u003e\u003ci\u003eEsse repositório exemplifica como realizar teste unitário de aplicação Serverless de forma a validar o seu comportamento a partir dos eventos enviados e garantir que todos os componentes estão bem integrados.\u003c/i\u003e\u003c/h4\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\nQuando criamos funções lambda precisamos garantir o comportamento de todos os itens de maneira integrada, e isso comumente ocorre subindo a aplicação e realizando os testes manuais, enquanto os métodos que são consumidos pela função lambda são validados unitariamente.\n\nNesse cenário podemos garantir que o método que identifica se determinado token é valido está comportando da maneira esperada ou não, porém não temos a garantia de que ele está funcionando corretamente de maneira integrada à função lambda, barrando acessos com token inválido e permitindo apenas os acessos com o token esperado.\n\nE é por isso que foi criado esse repositório, com o propósito de demonstrar que é sim possível validar uma função lambda totalmente integrada na camada de testes unitários, identificando comportamentos que normalmente seriam pegos apenas no teste manual. E com esse teste automatizado temos a vantagem de executar o mesmo de forma recorrente em pipeline a cada alteração.\n\nUma alta cobertura de cenários de funções lambda (e consequentemente alta cobertura de código) é possível.\n\n## Como estudar esse exemplo\n\nO exemplo principal é a demonstração da biblioteca [lambda-tester](https://www.npmjs.com/package/lambda-tester), que é utilizado nos arquivos que estão dentro do diretório [./tests/handler](./tests/handler).\n\nRecomendo você acessar o diretório [./src](./src), estudar os 2 arquivos presentes no mesmo e em seguida executar a aplicação localmente (ler a seção [Aplicação](#aplicação) mais abaixo) para entender o comportamento da função lambda criada.\n\nEm seguida execute os testes (ler a seção [Testes](#testes) mais abaixo) e estude os testes implementados.\n\n### **Dica de amigo**\n\nTodos os arquivos em _/src_ e _/tests_ possuem comentários no topo para auxiliar no entendimento do código, mesmo que não possua familiaridade com função lambda não deixe de acessá-los e ler.\n\nEspero que te auxilie :D\n\n## Pré-requisitos\n\nÉ preciso ter os seguintes programas instalados para executar os testes e a aplicação:\n- [Docker](https://docs.docker.com/get-docker/)\n- [Docker-compose](https://docs.docker.com/compose/install/)\n\n## Testes\n\nOs testes unitários que utilizam a biblioteca [lambda-tester](https://www.npmjs.com/package/lambda-tester) estão no diretório [./tests/handler](./tests/handler).\n\nOs testes estão divididos em 3 arquivos e validam os seguintes cenários:\n- **[tests/functions/tokenIsValid.spec.js](tests/functions/tokenIsValid.spec.js) -** Teste unitário do método `tokenIsValid` (em [./src/authorization.js](./src/authorization.js)).\n- **[tests/handler/catchError.spec.js](tests/handler/catchError.spec.js) -** Teste unitário da função lambda (em [./src/index.js](./src/index.js)) com a biblioteca _lambda-tester_ validando cenário de exceção.\n- **[tests/handler/authorization.spec.js](tests/handler/authorization.spec.js) -** Teste unitário da função lambda (em [./src/index.js](./src/index.js)) com a biblioteca _lambda-tester_ validando a integração da função lambda com o método _tokenIsValid_.\n\nPara rodar os testes execute o seguinte comando no terminal:\n\n```sh\ndocker-compose up test\n```\n\nOu, caso prefira, acesse a pipeline para ver o resultado dos testes: https://github.com/PauloGoncalvesBH/lambda-unit-test/actions\n\n### Resultado do teste\n\n![Resultado do teste](.github/resultado-teste.png)\n\nA linha 23 é o cenário de execução da função lambda estando autenticado. Essa linha não foi coberta devido de que o propósito desse exemplo era demonstrar o uso da biblioteca `lambda-tester`.\n\n## Aplicação\n\nA aplicação está no diretório [./src](./src), tendo como ponto de entrada o arquivo [./src/index.js](./src/index.js), e com a configuração do lambda no arquivo [serverless.yml](serverless.yml).\n\nPara iniciar a aplicação localmente execute o seguinte comando:\n\n```sh\ndocker-compose up start-serverless\n```\n\nE em seguida, no browser, acesse a URL http://localhost:3000/?token=auth-password.\n\nPara simular o comportamento de `Acesso não autorizado` acesse o browser com valor diferente em `token` ou sem o mesmo, como:\n- http://localhost:3000/?token=INVALIDO\n- http://localhost:3000\n\n## Materiais de referência\n\n- [Biblioteca NPM 'lambda-tester'](https://www.npmjs.com/package/lambda-tester)\n- [Texto 'Abordagem de testes' da Samanta Cicilia](https://medium.com/assertqualityassurance/abordagem-de-testes-212b6238f0c3) (_~~Pirâmide de testes é o mito da área de QA~~_)\n- [Documentação do plugin 'serverless-offline'](https://www.serverless.com/plugins/serverless-offline)\n\n---\n\n[LICENSE GNU General Public License v3.0](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulogoncalvesbh%2Flambda-unit-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpaulogoncalvesbh%2Flambda-unit-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpaulogoncalvesbh%2Flambda-unit-test/lists"}