{"id":21155523,"url":"https://github.com/ortegavan/cypress","last_synced_at":"2025-03-14T15:16:11.659Z","repository":{"id":237353800,"uuid":"794363802","full_name":"ortegavan/cypress","owner":"ortegavan","description":"Repositório de estudos com Cypress do curso Qualidade de Software da EBAC","archived":false,"fork":false,"pushed_at":"2024-05-04T18:45:37.000Z","size":94,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-11T11:48:03.080Z","etag":null,"topics":["cypress","javascript","testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ortegavan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-01T01:34:49.000Z","updated_at":"2025-01-15T21:30:25.000Z","dependencies_parsed_at":"2024-11-20T11:56:58.915Z","dependency_job_id":null,"html_url":"https://github.com/ortegavan/cypress","commit_stats":null,"previous_names":["ortegavan/cypress"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ortegavan%2Fcypress","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ortegavan%2Fcypress/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ortegavan%2Fcypress/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ortegavan%2Fcypress/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ortegavan","download_url":"https://codeload.github.com/ortegavan/cypress/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243597838,"owners_count":20316844,"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":["cypress","javascript","testing"],"created_at":"2024-11-20T11:21:57.610Z","updated_at":"2025-03-14T15:16:11.640Z","avatar_url":"https://github.com/ortegavan.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Cypress\n\nRepositório de estudos com Cypress do curso de Qualidade de Software da EBAC\n\n# Primeiro módulo\n\n## Aula 1\n\n-   Adicionamos as extensões Cypress Snippets (de Andrew Smith) e ES6 Mocha Snippets (de Cory Noonan) ao VS Code;\n-   Inicializamos a aplicação Node com `npm init -y` e instalamos o Cypress com `npm install cypress@13.6.0`;\n-   Abrimos o Cypress com `npx cypress open` e rodamos o primeiro teste de exemplo.\n\n## Aula 2\n\nEscrevemos nosso primeiro teste `login.cy.js` que validou o login na loja EBAC:\n\n```javascript\ndescribe('login na loja ebac', () =\u003e {\n    beforeEach(() =\u003e {\n        cy.visit('http://lojaebac.ebaconline.art.br/minha-conta/');\n    });\n\n    it('deve fazer login com sucesso', () =\u003e {\n        cy.get('#username').type('ortegavan@teste.com');\n        cy.get('#password').type('qarwiv-2fonDi-qortyv');\n        cy.get('.woocommerce-form \u003e .button').click();\n\n        cy.get('.woocommerce-MyAccount-content \u003e :nth-child(2)').should(\n            'contain',\n            'Olá, Van Ortega',\n        );\n    });\n});\n```\n\n## Aula 3\n\n-   Criamos testes para os cenários negativos de login;\n-   Aplicamos hooks `beforeEach` e `afterEach` para centralizar setup e tirar screenshots;\n-   Utilizamos `only` para rodar apenas um teste.\n\n## Aula 4\n\n-   Instalamos a lib `Faker` com o comando `npm i @faker-js/faker`;\n-   Importamos o Faker em um novo arquivo de testes:\n\n```javascript\nimport { fakerPT_BR as faker } from '@faker-js/faker';\n```\n\n-   Criamos um teste de cadastro de usuário com dados aleatórios utilizando o Faker:\n\n```javascript\nit('deve fazer o cadastro com sucesso', () =\u003e {\n    const nome = faker.person.firstName('female');\n    const sobrenome = faker.person.lastName();\n    const email = faker.internet.exampleEmail({\n        firstName: nome,\n        lastName: sobrenome,\n    });\n    const senha = 'qarwiv-2fonDi-qortyv';\n\n    cy.get('#reg_email').type(email);\n    cy.get('#reg_password').type(senha);\n    cy.get(':nth-child(4) \u003e .button').click();\n    cy.get('.woocommerce-MyAccount-navigation-link--edit-account \u003e a').click();\n    cy.get('#account_first_name').type(nome);\n    cy.get('#account_last_name').type(sobrenome);\n    cy.get('.woocommerce-Button').click();\n    cy.get('.woocommerce-message').should(\n        'contain',\n        'Detalhes da conta modificados com sucesso.',\n    );\n});\n```\n\n## Aula 5\n\nAprendemos a navegar/selecionar itens em uma lista usando as opções `eq`, `first`, `last` e `contains`. Para o teste solicitado, optei por usar `eq` com um índice randômico de 0 a 8:\n\n```javascript\nit('deve selecionar um produto da lista', () =\u003e {\n    const indice = Math.floor(Math.random() * 9);\n\n    cy.get('.product-block').eq(indice).click();\n    cy.get('#tab-title-description \u003e a').should('contain', 'Descrição');\n});\n```\n\n# Segundo módulo\n\n## Aula 1\n\n-   Configuramos a `baseUrl` no arquivo `cypress.config.js` para evitar repetição de URL;\n-   Utilizamos `fixture` para mockar dados de login e cadastro criando o arquivo `login.json` na pasta `fixtures` e consumindo no teste:\n\n```javascript\ncy.fixture('login').then((login) =\u003e {\n    cy.get('#username').type(login.usuario);\n    cy.get('#password').type(login.senha, { log: false });\n    cy.get('.woocommerce-form \u003e .button').click();\n    cy.get('.woocommerce-MyAccount-content \u003e :nth-child(2)').should(\n        'contain',\n        'Olá, Van Ortega',\n    );\n});\n```\n\n## Aula 2\n\nAprendemos a criar comandos customizados para reutilização de código. Os comandos customizados são escritos no arquivo `support/commands.js` e utilizados com a sintaxe `cy.nomeDoComando()`.\n\n## Aula 3\n\nAprendemos sobre `page objects` e como criar uma classe para centralizar os elementos da página. Criamos e exportamos a classe `ProdutosPage` no arquivo `support/page-objects/produtos.page.js` e importamos no teste:\n\n```javascript\nimport produtosPage from '../../support/page-objects/produtos.page';\n```\n\n## Aula 4\n\nUtilizamos `fixture` para mockar dados, agora, usando uma lista. Criamos o arquivo `produtos.json` na pasta `fixtures` e consumimos no teste:\n\n```javascript\nit.only('deve adicionar produtos ao carrinho a partir da massa de dados', () =\u003e {\n    cy.fixture('produtos').then((produtos) =\u003e {\n        produtos.forEach((produto) =\u003e {\n            produtosPage.buscarProduto(produto.nome);\n            produtosPage.adicionarProdutoAoCarrinho(\n                produto.tamanho,\n                produto.cor,\n                produto.quantidade,\n            );\n            cy.get('.woocommerce-message').should('exist');\n        });\n    });\n});\n```\n\n## Aula 5\n\nCriamos uma conta na nuvem do Cypress e configuramos a aplicação para rodar os testes na nuvem. Para isso, no arquivo `cypress.config.js`, adicionamos id do projeto:\n\n```javascript\n{\n    \"projectId\": \"[id do projeto aqui],\n}\n```\n\nE rodamos o comando `npx cypress run --record --key [chave do projeto]` para enviar os testes para a nuvem.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fortegavan%2Fcypress","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fortegavan%2Fcypress","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fortegavan%2Fcypress/lists"}