-
Notifications
You must be signed in to change notification settings - Fork 15
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
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this 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.
cypress/e2e/apiTeste1.cy.js
Outdated
const UI_URL = 'http://localhost:3000' | ||
|
||
const clickCookieConsent = () => { | ||
cy.wait(2000) // Espera 2 segundos para garantir que a página carregou completamente |
There was a problem hiding this comment.
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')
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, retirado.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, removido.
cypress/e2e/apiTeste1.cy.js
Outdated
beforeEach(() => { | ||
cy.visit(UI_URL, { | ||
onBeforeLoad: (win) => { | ||
win.localStorage.setItem('cookieConsent', 'true'); |
There was a problem hiding this comment.
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
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, revisado.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok, resolvido.
cypress/e2e/apiTeste1.cy.js
Outdated
} | ||
}) | ||
}) | ||
}) |
There was a problem hiding this comment.
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.
}) | |
}) | |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok.
cypress/fixtures/example.json
Outdated
@@ -0,0 +1,5 @@ | |||
{ |
There was a problem hiding this comment.
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).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Corrigido.
There was a problem hiding this comment.
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?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ok. verificado.
cypress/support/commands.js
Outdated
@@ -0,0 +1,25 @@ | |||
// *********************************************** |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Faltou esse ajuste.
There was a problem hiding this comment.
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"
There was a problem hiding this 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).

package.json
Outdated
@@ -30,5 +30,8 @@ | |||
"last 1 firefox version", | |||
"last 1 safari version" | |||
] | |||
}, | |||
"dependencies": { | |||
"cypress": "^13.15.0" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Faltou esse ajuste.
There was a problem hiding this 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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Enviando novamente
Co-authored-by: Walmyr <wlsf82@gmail.com>
Co-authored-by: Walmyr <wlsf82@gmail.com>
Co-authored-by: Walmyr <wlsf82@gmail.com>
There was a problem hiding this 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', |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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'); |
There was a problem hiding this comment.
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'); |
There was a problem hiding this comment.
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') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
// 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" |
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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?
Teste 01 API