Crie um protótipo de interface de e-commerce com o GitHub Copilot
O desenvolvimento em linguagem natural ainda exige decisões de engenharia. Este exercício usa o cenário original de protótipo de compras, mas substitui a geração sem limites por um contrato pequeno, um módulo de domínio funcional e verificações observáveis da interface.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 200; 50 minutos (estimativa de facilitação) |
| Ação inicial | Escreva um PRD pequeno e teste a interface só com o teclado. |
| Materiais do aluno | Baixe 06-prototype.zip |
| Workspace | Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz |
| Verificação inicial esperada | Os testes base fornecidos passam. |
| Ajuda de configuração | Baixe, extraia, Git local e GitHub opcional |
[!NOTE] Testes de domínio não estabelecem foco utilizável, rótulos ou comportamento de viewport.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Escreva um PRD viável com exclusões e critérios de aceitação.
- Separe instruções duradouras de engenharia de requisitos de produto específicos da tarefa.
- Implemente uma interface utilizável sobre um contrato testado de carrinho.
- Use verificações de teclado, viewport e estados de erro para questionar a saída gerada.
Antes de começar
Prepare 06-prototype com o procedimento da unidade de trabalho.
Node 24 é suficiente; não instale um framework de front-end ou pacote externo de imagens.
Use somente os produtos sintéticos da fixture. A finalização da compra é uma simulação, não um formulário de pagamento.
Conceitos e casos de uso
| Artefato | Contém | Não contém |
|---|---|---|
| PRD | Objetivos do usuário, comportamento, aceitação, exclusões | Alegações de resultados de testes |
| Wireframe | Navegação e hierarquia de informações | Implementação de regras de negócio |
| Instruções | Convenções breves e regras de validação | O PRD inteiro copiado em cada solicitação |
| Testes de domínio | Aritmética do carrinho e entradas rejeitadas | Comprovação visual ou de acessibilidade |
Cenário do exercício
Uma pessoa compradora navega por três produtos, abre detalhes, adiciona quantidades a um carrinho e revisa um resumo simulado do pedido. Não são necessários conta, análise de uso, recursos remotos, persistência, processador de pagamentos ou dados pessoais reais.
Tarefa 1 - Estabeleça a linha de base do domínio
-
Inspecione
cart.mjs, seu teste e o HTML inicial. -
Execute:
node --test --test-concurrency=1 cart.test.mjs -
Registre que estes testes exercitam regras de domínio, não a interface inacabada.
-
Em Ask, peça uma descrição das linhas válidas do carrinho e de como os totais são representados. Verifique a resposta nas fontes: os valores monetários usam centavos inteiros.
Tarefa 2 - Escreva o PRD antes de gerar a interface
-
Use os exemplos de PRD.
-
Crie
PRD.mdno workspace descartável com estes critérios de aceitação:ID Critério Verificação observável SHOP-1 Listar todos os produtos incluídos Nomes e preços dos produtos estão visíveis SHOP-2 Navegar entre lista, detalhes, carrinho e resumo O teclado consegue acessar cada visualização e retornar SHOP-3 Mostrar totais do módulo de domínio Duas maçãs e uma banana custam 330 centavos SHOP-4 Rejeitar quantidades inválidas Quantidades zero, negativas, fracionárias e vazias exibem erros SHOP-5 Anunciar mudanças de estado Status visível e uma região dinâmica apropriada SHOP-6 Mostrar somente a finalização simulada da compra Nenhum campo de cartão, senha ou endereço real -
Esboce uma tela para cada visualização. Um layout textual com rótulos é suficiente.
-
Escolha viewports representativos para dispositivos móveis/desktop, como 375 e 1280 pixels CSS. Não use um ponto de quebra de 300 pixels como único teste responsivo.
Tarefa 3 - Revise um plano
Use Plan:
Use PRD.md and the existing cart.mjs contract. Plan a framework-free interface.
Identify the views, DOM state, labels, focus transitions, error messages, and
keyboard/viewport checks. Keep currency arithmetic in cart.mjs. Do not implement yet.
Aprove a menor implementação. Rejeite finalização real de compras, rastreamento remoto, dependências sem relação com a tarefa ou uma nova implementação de preços que duplique o módulo testado.
Tarefa 4 - Implemente uma visualização por vez
- Em Agent, implemente primeiro a lista de produtos e a visualização de detalhes.
- Revise o diff e teste a navegação antes de adicionar controles do carrinho.
- Reutilize
summarizeCartpara os totais; apresente strings visíveis ao usuário com APIs seguras do DOM. - Adicione as visualizações de carrinho e confirmação simulada. Exija nomes acessíveis e gerenciamento de foco.
- Coloque somente convenções em
.github/copilot-instructions.md; vinculePRD.mdcomo contexto desta tarefa em vez de copiar todo o conteúdo dele para as instruções. - Pare após duas tentativas de correção malsucedidas para inspecionar o menor comportamento com problema.
Tarefa 5 - Observe o protótipo em execução
-
Inicie o servidor fornecido, restrito ao loopback:
node serve.mjs -
Abra a URL impressa. Ela usa uma porta atribuída pelo sistema operacional para evitar interferência em outros projetos.
-
Execute manualmente as verificações SHOP-1 a SHOP-6.
-
Repita usando somente navegação por teclado e ambos os viewports selecionados.
-
Tente deliberadamente uma quantidade zero e confirme um erro, em vez de uma redefinição silenciosa ou um total incorreto.
-
Execute novamente os testes de domínio e inspecione o console do navegador. Registre os resultados reais.
Verifique seu trabalho
- Os testes de domínio continuam passando, incluindo entradas rejeitadas.
- Cada critério de aceitação do PRD tem uma observação no navegador.
- Nenhuma transação real, credencial, rastreador ou recurso remoto foi introduzido.
- O foco do teclado permanece visível e utilizável após a navegação.
- Nenhum sucesso é alegado apenas porque a página parece plausível.
Solução de problemas
| Sintoma | Verificação |
|---|---|
| A importação de módulo falha em uma URL de arquivo | Use o servidor local fornecido |
| O total difere em um centavo | Reutilize a aritmética de centavos inteiros em vez de valores de exibição em ponto flutuante |
| Os controles do carrinho são inacessíveis | Inspecione controles semânticos, rótulos, ordem de tabulação e foco |
| O layout móvel transborda | Teste o viewport real e nomes longos de produtos, não apenas o redimensionamento da janela |
Prática independente
Adicione um filtro por nome com um estado sem resultados. Especifique se maiúsculas/minúsculas e espaços nas extremidades importam e teste esses casos. Mantenha-o somente no cliente.
Restauração
Pare serve.mjs com Ctrl+C, salve as evidências e restaure somente os arquivos de interface que
você alterou na cópia descartável. Não remova nem pare o servidor de outro projeto.