Add basic test for landing page

This commit is contained in:
Alexander Navarro 2023-11-27 19:52:08 -03:00
parent ea22c57f41
commit 5a4c64ed21
9 changed files with 1135 additions and 86 deletions

View file

@ -3,23 +3,28 @@ module.exports = {
browser: true, browser: true,
es2021: true, es2021: true,
}, },
extends: ["standard-with-typescript", "plugin:react/recommended", "prettier"], extends: [
'standard-with-typescript',
'plugin:react/recommended',
'plugin:cypress/recommended',
'prettier',
],
overrides: [ overrides: [
{ {
env: { env: {
node: true, node: true,
}, },
files: [".eslintrc.{js,cjs}"], files: ['.eslintrc.{js,cjs}'],
parserOptions: { parserOptions: {
sourceType: "script", sourceType: 'script',
}, },
}, },
], ],
parserOptions: { parserOptions: {
ecmaVersion: "latest", ecmaVersion: 'latest',
sourceType: "module", sourceType: 'module',
project: ["./tsconfig.json"], project: ['./tsconfig.json'],
}, },
plugins: ["react"], plugins: ['react', 'cypress'],
rules: {}, rules: {},
}; };

2
.rtx.toml Normal file
View file

@ -0,0 +1,2 @@
[tools]
node = "20"

10
cypress.config.ts Normal file
View file

@ -0,0 +1,10 @@
import { defineConfig } from 'cypress';
export default defineConfig({
e2e: {
baseUrl: 'http://localhost:3000',
setupNodeEvents(on, config) {
// implement node event listeners here
},
},
});

View file

@ -0,0 +1,25 @@
describe('The Home Page', () => {
beforeEach(() => {
cy.visit('/');
});
it('Successfully load', () => {
cy.get('h1')
.should('have.length', 1)
.should('have.text', 'Alexander Navarro');
});
it('Card components have content', () => {
cy.get('.card')
.should('have.length', 3)
.each(($card) => {
cy.wrap($card)
.find('li')
.should(($li) => expect($li).to.have.lengthOf.at.most(3))
.find('a')
.should('have.attr', 'href');
cy.wrap($card).contains('See more...');
});
});
});

View file

@ -0,0 +1,5 @@
{
"name": "Using fixtures to represent data",
"email": "hello@cypress.io",
"body": "Fixtures are a great way to mock data for responses to routes"
}

View file

@ -0,0 +1,37 @@
/// <reference types="cypress" />
// ***********************************************
// This example commands.ts shows you how to
// create various custom commands and overwrite
// existing commands.
//
// For more comprehensive examples of custom
// commands please read more here:
// https://on.cypress.io/custom-commands
// ***********************************************
//
//
// -- This is a parent command --
// Cypress.Commands.add('login', (email, password) => { ... })
//
//
// -- This is a child command --
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
//
//
// -- This is a dual command --
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
//
//
// -- This will overwrite an existing command --
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
//
// declare global {
// namespace Cypress {
// interface Chainable {
// login(email: string, password: string): Chainable<void>
// drag(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
// dismiss(subject: string, options?: Partial<TypeOptions>): Chainable<Element>
// visit(originalFn: CommandOriginalFn, url: string, options: Partial<VisitOptions>): Chainable<Element>
// }
// }
// }

20
cypress/support/e2e.ts Normal file
View file

@ -0,0 +1,20 @@
// ***********************************************************
// This example support/e2e.ts is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// Import commands.js using ES2015 syntax:
import './commands'
// Alternatively you can use CommonJS syntax:
// require('./commands')

View file

@ -21,9 +21,11 @@
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.62.0", "@typescript-eslint/eslint-plugin": "^5.62.0",
"cypress": "^13.6.1",
"eslint": "^8.53.0", "eslint": "^8.53.0",
"eslint-config-prettier": "^8.10.0", "eslint-config-prettier": "^8.10.0",
"eslint-config-standard-with-typescript": "^35.0.0", "eslint-config-standard-with-typescript": "^35.0.0",
"eslint-plugin-cypress": "^2.15.1",
"eslint-plugin-import": "^2.29.0", "eslint-plugin-import": "^2.29.0",
"eslint-plugin-n": "^15.7.0", "eslint-plugin-n": "^15.7.0",
"eslint-plugin-promise": "^6.1.1", "eslint-plugin-promise": "^6.1.1",

1101
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff