Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Primeiro PR Teste #6

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open

Primeiro PR Teste #6

wants to merge 9 commits into from

Conversation

fabianoseller
Copy link

Teste 01 API

Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Parabéns pela resolução dos exercícios @fabianoseller. 👏🏻

Deixei comentários ao longo do seu código, os quais creio que lhe ajudarão a melhorar o design do mesmo.

Aguarde até o próximo encontro antes de implementar as mudanças.

const UI_URL = 'http://localhost:3000'

const clickCookieConsent = () => {
cy.wait(2000) // Espera 2 segundos para garantir que a página carregou completamente
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NUNCA use cy.wait(Number).

Isso é uma má prática que:

Ou vai fazer o teste mais lento do que o necessário se a página carregar antes desse tempo.

Ou vai tornar o teste não determinísito, se tal tempo não for o suficiente.

O Cypress já tem mecanismos de espera bem estabelecidos, portanto, evite isso.

Se for usar o cy.wait(), utilize-o em conjunto com o cy.intercept(...).as('alias'), onde após uma ação do usuário disparar tal requisição, você possa verificar por ela, através de seu alias. Ex.: cy.wait('@alias').

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, retirado.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, removido.

beforeEach(() => {
cy.visit(UI_URL, {
onBeforeLoad: (win) => {
win.localStorage.setItem('cookieConsent', 'true');
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Os valores corretos para o cookieConsent são accepted ou declined.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, revisado.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, resolvido.

}
})
})
})
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

É recomendado deixar uma linha em branco ao final de cada arquivo.

Dessa forma, ferramentas como o GitHub não exibem o ícone de No newline at end of file.

Isso é uma boa prática e convenção que deve ser seguida.

Suggested change
})
})

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok.

@@ -0,0 +1,5 @@
{
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recomendo deletar tal arquivo visto que ele não está sendo usado.

Segue uma explicação abaixo:

Deixar as pastas cypress/fixtures/ e cypress/support/ quando estas não estão em uso

É comum alunos/as escreverem testes que não fazem uso dos arquivos contidos nas pastas cypress/fixtures/ e cypress/support/.

Por que tal prática fere um bom design de testes?

Tal prática aumenta a complexidade do projeto, visto que é mais código para ler e entender.

Sugestão com um melhor design

Caso os arquivos das pastas citadas acima não estejam sendo usados, é recomendado deletar tais pastas por completo e configurar o Cypress para ignorá-las, conforme demonstrado abaixo.

// cypress.config.js

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  e2e: {
    baseUrl: '...',
    supportFile: false
  },
  fixturesFolder: false,
})

Dessa forma, ao inicializar o Cypress, o mesmo não irá re-gerar tais arquivos e pastas, a base de código estará menor e mais simples, que é exatamente o que buscamos com um bom design (simplicidade).

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrigido.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Como corrigido se o arquivo continua aqui?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. verificado.

@@ -0,0 +1,25 @@
// ***********************************************
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesmo que o comentário anterior.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok.

package.json Outdated
@@ -30,5 +30,8 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"dependencies": {
"cypress": "^13.15.0"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

O Cypress deveria ter sido instalado como devDependencies, não dependencies.

Segue uma explicação detalhada abaixo:

Instalação de libs (ou packages) como dependencies em vez de devDependencies

É comum alunos/as instalarem packages do npm que servem para suportar o desenvolvimento de aplicações como dependencies em vez de devDependencies.

Por que tal prática fere um bom design de testes?

Tal prática prejudica o desempenho do projeto, visto que mais pacotes externos exigem mais tempo para serem baixados da internet e em esteiras de entrega contínua, é possível configurar que somente as dependencies sejam instaladas no momento da implantação de uma nova versão em um ambiente produtivo, por exemplo, sem perda de tempo instalando devDependencies.

Sugestão com um melhor design

Basta entender o pra que serve cada pacote e instalar os pacotes certos do jeito certo.

Aqui vai uma breve explicação:

No contexto de módulos npm, a principal diferença entre dependencies e devDependencies está no momento em que os pacotes são necessários:

  • dependencies: São os pacotes essenciais que o projeto precisa para funcionar em produção. Esses módulos são instalados quando o projeto é executado em ambientes finais, como servidores de produção ou em builds de lançamento. São usados diretamente pelo código do projeto durante a execução (ex.: React).
  • devDependencies: São pacotes usados apenas durante o desenvolvimento e testes do projeto. Incluem ferramentas como linters, frameworks de testes e geradores de documentação. Esses módulos não são necessários em produção e, portanto, não são instalados quando o projeto é implementado nesse ambiente, exceto se forem explicitamente requisitados.

Em resumo, dependencies são para a execução do projeto, enquanto devDependencies são para o suporte ao desenvolvimento do mesmo.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Faltou esse ajuste.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok. },
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"cypress"

@fabianoseller fabianoseller requested a review from wlsf82 October 17, 2024 01:39
Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tá na mão @fabianoseller. 👍🏻

Deixei alguns comentários, os quais creio que lhe ajudarão a melhorar o design dos testes.

Além disso, a maioria dos testes não estão passando, conforme imagem em anexo.

Da próxima vez, recomendo testar localmente antes de mandar para revisão.

Lembre-se de só enviar mudanças para um novo round de code review depois do próximo encontro da Test Design Masterclass (depois de 19/10/2024).

7 de 11 testes falhando-fabianoseller

package.json Outdated
@@ -30,5 +30,8 @@
"last 1 firefox version",
"last 1 safari version"
]
},
"dependencies": {
"cypress": "^13.15.0"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Faltou esse ajuste.

@fabianoseller fabianoseller requested a review from wlsf82 October 31, 2024 01:05
Copy link
Author

@fabianoseller fabianoseller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tentei arrumar alguns códigos mas quebraram outros...perdão.

Copy link
Author

@fabianoseller fabianoseller left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enviando novamente

@fabianoseller fabianoseller marked this pull request as draft October 31, 2024 13:42
@fabianoseller fabianoseller marked this pull request as ready for review October 31, 2024 13:43
fabianoseller and others added 3 commits October 31, 2024 10:46
Co-authored-by: Walmyr <wlsf82@gmail.com>
Co-authored-by: Walmyr <wlsf82@gmail.com>
Co-authored-by: Walmyr <wlsf82@gmail.com>
Copy link
Owner

@wlsf82 wlsf82 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@fabianoseller, parabéns pela resolução dos exercícos.

Deixei novos comentários, os quais espero que lhe ajudem a desenvolver habilidades de design de testes automatizados.

Uma observação: senti falta de criar testes para a interface gráfica de usuário.

Sua suíte de testes só validou a API. Ou seja, se a GUI estiver "quebrada" seus testes não vão pegar isso.

Espero que tenhas gostado da experiência de code review da Test Design Masterclass da Talking About Testing. 😉


module.exports = defineConfig({
e2e: {
baseUrl: 'http://localhost:3000',
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Você está definindo a URL do frontend mas deletou todos os testes para esta parte da aplicação.

Se o frontend não está mais sendo testado, esta configuração não se faz necessária.

A propósito, o que o levou a deletar os testes do frontend?

@@ -0,0 +1,72 @@
// cypress/e2e/api/customers.cy.js
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Todos os testes deste arquivo estão falhando, portanto, não irei revisá-lo.

@@ -0,0 +1,70 @@
// cypress/e2e/api/customers.cy.js
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Este comentário é complemente desnecessário, visto que simplemente replica o caminho do arquivo na estrutura de pastas.

Recomendo removê-lo por completo.

it('returns a list of customers with default pagination', () => {
cy.request(CUSTOMERS_API_URL).then(({ status, body }) => {
expect(status).to.eq(200);
expect(body).to.have.property('customers').that.is.an('array');
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Que tal verificar também as sub-propriedades de customers, assim como fez com as sub-propriedades de pageInfo?

cy.request(CUSTOMERS_API_URL).then(({ status, body }) => {
expect(status).to.eq(200);
const customer = body.customers[0];
expect(customer).to.have.all.keys('id', 'name', 'employees', 'industry', 'contactInfo', 'address', 'size');
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estas verificações poderiam estar no primeiro teste desta suíte, evitando um teste a mais.

Quanto menos testes, mais rápido o feedback.

import './commands'

// Alternatively you can use CommonJS syntax:
// require('./commands')
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
// require('./commands')
// require('./commands')

Recomenda-se deixar uma linha em branco ao final de cada arquivo.

Dessa forma, ferramentas como o GitHub não exibem o ícone de No newline at end of file.

Isso é uma boa prática e convenção a ser seguida.

@@ -8,7 +8,8 @@
"react-scripts": "^5.0.1"
},
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11"
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"cypress": "^13.15.0"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Visto que você não está testando o frontend à nível de componentes, não há a necessidade de instalar o Cypress na pasta frontend/.

@@ -17,7 +17,8 @@
"license": "MIT",
"homepage": "https://github.com/wlsf82/EngageSphere-Test-Design-Masterclass-Turma-3/blob/main/README.md",
"devDependencies": {
"@babel/plugin-proposal-private-property-in-object": "^7.21.11"
"@babel/plugin-proposal-private-property-in-object": "^7.21.11",
"cypress": "^13.12.0"
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Que tal atualizar para a versão mais recente do Cypress?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants