As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Execute testes unitários para um aplicativo Node.js GitHub usando a AWS CodeBuild
Thomas Scott e Jean-Baptiste Guillois, Amazon Web Services
Resumo
Esse padrão fornece um exemplo de código-fonte e dos principais componentes de teste de unidade para uma API de jogo Node.js. Também inclui instruções para executar esses testes unitários a partir de um GitHub repositório usando a AWS CodeBuild, como parte de seu fluxo de trabalho de integração contínua e entrega contínua (CI/CD).
O teste de unidade é um processo de desenvolvimento de software no qual diferentes partes de um aplicativo, chamadas de unidades, são testadas de forma individual e independente para operação correta. Os testes validam a qualidade do código e confirmam que ele funciona conforme o esperado. Outros desenvolvedores também podem se familiarizar facilmente com sua base de código consultando os testes. Os testes de unidade reduzem o tempo futuro de refatoração, ajudam os engenheiros a se familiarizarem com sua base de código com mais rapidez e fornecem confiança no comportamento esperado.
O teste de unidade envolve testar funções individuais, incluindo funções do AWS Lambda. Para criar testes de unidade, você precisa de uma estrutura de testes e de uma forma de validar testes (asserções). Os exemplos de código nesse padrão usam a estrutura de teste Mocha
Para obter mais informações sobre testes de unidade e exemplos de componentes de teste, consulte a seção Informações adicionais.
Pré-requisitos e limitações
- Uma conta ativa da AWS com CodeBuild as permissões corretas 
- Uma GitHub conta (veja as instruções para se inscrever - ) 
- Git (consulte as instruções de instalação - ) 
- Um editor de código para fazer alterações e enviar seu código para GitHub 
Arquitetura
Esse padrão implementa a arquitetura mostrada no diagrama a seguir.

Ferramentas
Ferramentas
- O Git - é um sistema de controle de versão que você pode usar para desenvolvimento de código. 
- CodeBuildA AWS é um serviço de integração contínua totalmente gerenciado que compila o código-fonte, executa testes e produz pacotes de software prontos para implantação. Com CodeBuild, você não precisa provisionar, gerenciar e escalar seus próprios servidores de compilação. CodeBuild escala continuamente e processa várias compilações simultaneamente, para que suas compilações não fiquem esperando em uma fila. Você pode começar a usar ambientes de compilação pré-empacotados rapidamente ou criar ambientes de compilação personalizados que usem suas próprias ferramentas de compilação. Com CodeBuild, você é cobrado por minuto pelos recursos computacionais que usa. 
Código
O código-fonte desse padrão está disponível em GitHub, no repositório de aplicativos Sample Game Unit Test
Épicos
| Tarefa | Descrição | Habilidades necessárias | 
|---|---|---|
| Crie seu próprio GitHub repositório com base no projeto de amostra. | 
 | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Crie um novo CodeBuild projeto. | 
 | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Inicie a compilação. | Na página Revisão, escolha Iniciar compilação para executar a compilação. | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Tarefa | Descrição | Habilidades necessárias | 
|---|---|---|
| Crie um novo projeto de CodeBuild construção. | 
 | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Inicie a compilação. | Na página Revisão, escolha Iniciar compilação para executar a compilação. | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Tarefa | Descrição | Habilidades necessárias | 
|---|---|---|
| Visualizar resultados do teste | No CodeBuild console, revise os resultados do teste de unidade do CodeBuild trabalho. Eles devem corresponder aos resultados mostrados na seção Informações adicionais. Esses resultados validam a integração do GitHub repositório com o. CodeBuild | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
| Aplique um webhook. | Agora você pode aplicar um webhook, para poder iniciar automaticamente uma compilação sempre que enviar alterações de código para a ramificação principal do seu repositório. Para obter instruções, consulte a CodeBuild documentação. | Desenvolvedor de aplicativos, administrador da AWS, AWS DevOps | 
Recursos relacionados
- Exemplo de aplicativo de teste de unidade de jogo - (GitHub repositório com código de amostra) 
- GitHub eventos de webhook (CodeBuild documentação) 
- Criação de um novo repositório - (GitHub documentação) 
Mais informações
Resultados do teste de unidade
No CodeBuild console, você deve ver os seguintes resultados de teste após a criação bem-sucedida do projeto.

Exemplo de componentes de teste da unidade
Esta seção descreve os quatro tipos de componentes de teste usados em testes de unidade: asserções, espiões, stubs e simulações. Ela inclui uma breve explicação e um exemplo de código de cada componente.
Asserções
Uma asserção é usada para verificar um resultado esperado. Esse é um componente de teste importante porque valida a resposta esperada de uma determinada função. O exemplo de declaração a seguir valida que o ID retornado está entre 0 e 1000 ao inicializar um novo jogo.
const { expect } = require('chai'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { const game = new Game(); expect(game.id).is.above(0).but.below(1000) }); });
Espiões
Um espião é usado para observar o que está acontecendo quando uma função está em execução. Por exemplo, convém validar se a função foi chamada corretamente. O exemplo a seguir mostra que os métodos iniciar e parar são chamados em um objeto da classe Jogo.
const { expect } = require('chai'); const { spy } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('should verify that the correct function is called', () => { const spyStart = spy(Game.prototype, "start"); const spyStop = spy(Game.prototype, "stop"); const game = new Game(); game.start(); game.stop(); expect(spyStart.called).to.be.true expect(spyStop.called).to.be.true }); });
Stub
Um stub é usado para substituir a resposta padrão de uma função. Isso é especialmente útil quando a função faz uma solicitação externa, porque você quer evitar fazer solicitações externas a partir de testes de unidade. (As solicitações externas são mais adequadas para testes de integração, que podem testar fisicamente as solicitações entre componentes diferentes.) No exemplo a seguir, um stub força um ID de retorno da função getId.
const { expect } = require('chai'); const {.stub } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let generateIdStub = stub(Game.prototype, 'getId').returns(999999); const game = new Game(); expect(game.getId).is.equal(999999); generateIdStub.restore(); }); });
Simulações
Uma simulação é um método falso que tem um comportamento pré-programado para testar diferentes cenários. Uma simulação pode ser considerada uma forma estendida de um stub e pode realizar várias tarefas simultaneamente. No exemplo a seguir, uma simulação é usada para validar três cenários:
- Função é chamada 
- Função é chamada com argumentos 
- Função retorna o 9 inteiro 
const { expect } = require('chai'); const {.mock } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let mock = mock(Game.prototype).expects('getId').withArgs().returns(9); const game = new Game(); const id = get.getId(); mock.verify(); expect(id).is.equal(9); }); });