├── .github
└── workflows
│ └── test.yml
├── 11-testing-problems
├── .babelrc
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── README.md
├── build
│ ├── build.js
│ ├── check-versions.js
│ ├── dev-client.js
│ ├── dev-server.js
│ ├── utils.js
│ ├── vue-loader.conf.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
├── circle.yml
├── config
│ ├── dev.env.js
│ ├── index.js
│ └── prod.env.js
├── index.html
├── package-lock.json
├── package.json
├── src
│ ├── App.vue
│ ├── components
│ │ ├── List.vue
│ │ ├── Message.js
│ │ ├── MessageToggle.vue
│ │ └── Page.vue
│ ├── main.js
│ └── router
│ │ └── index.js
├── test
│ ├── .eslintrc
│ └── specs
│ │ ├── List.spec.js
│ │ ├── Message.spec.js
│ │ ├── MessageToggle.spec.js
│ │ └── __snapshots__
│ │ └── List.spec.js.snap
└── yarn.lock
├── 12-first-test
├── .eslintcache
├── .gitignore
├── README.md
├── jest.config.js
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ │ ├── Form.js
│ │ └── Posts.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── setupTests.js
│ └── tests
│ │ ├── 01-Form.test.js
│ │ └── 02-FormUserEvent.test.js
└── yarn.lock
├── 21-frameworks
├── angular
│ ├── .browserslistrc
│ ├── .editorconfig
│ ├── .gitignore
│ ├── README.md
│ ├── angular.json
│ ├── e2e
│ │ ├── protractor.conf.js
│ │ ├── src
│ │ │ ├── app.e2e-spec.ts
│ │ │ └── app.po.ts
│ │ └── tsconfig.json
│ ├── jest-global-mocks.ts
│ ├── jest.config.js
│ ├── karma.conf.js
│ ├── package-lock.json
│ ├── package.json
│ ├── setup-jest.ts
│ ├── src
│ │ ├── app
│ │ │ ├── app.component.css
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── components
│ │ │ │ ├── form.component.ts
│ │ │ │ └── posts.component.ts
│ │ │ └── test
│ │ │ │ └── form.component.spec.ts
│ │ ├── assets
│ │ │ └── .gitkeep
│ │ ├── environments
│ │ │ ├── environment.prod.ts
│ │ │ └── environment.ts
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── karmaTest.ts
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ └── styles.css
│ ├── tsconfig.app.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── react
│ ├── .gitignore
│ ├── README.md
│ ├── package.json
│ ├── public
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── logo192.png
│ │ ├── logo512.png
│ │ ├── manifest.json
│ │ └── robots.txt
│ ├── src
│ │ ├── App.css
│ │ ├── App.js
│ │ ├── components
│ │ │ ├── Form.js
│ │ │ └── Posts.js
│ │ ├── index.css
│ │ ├── index.js
│ │ ├── logo.svg
│ │ ├── reportWebVitals.js
│ │ ├── setupTests.js
│ │ └── test
│ │ │ └── Form.test.js
│ └── yarn.lock
└── vue
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ └── index.html
│ └── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── Form.vue
│ └── Posts.vue
│ ├── main.js
│ └── test
│ └── Form.spec.js
├── 22-unit-test
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── cursos
│ │ ├── bash.jpg
│ │ ├── buenas-practicas-bdd-cucumber-behat.jpg
│ │ ├── comunicacion-microservicios.jpg
│ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg
│ │ ├── css-layouts-bg.png
│ │ ├── css-layouts.jpg
│ │ ├── curso-agile-retrospectivas.jpg
│ │ ├── curso-api-http-scala.jpg
│ │ ├── curso-app-mean-webpack.jpg
│ │ ├── curso-app-vuejs-jest.jpg
│ │ ├── curso-arquitectura-hexagonal.jpg
│ │ ├── curso-aws-ec2.jpg
│ │ ├── curso-aws-escalando-apps.jpg
│ │ ├── curso-cqrs.jpg
│ │ ├── curso-introduccion-scala.jpg
│ │ ├── curso-screenshot-testing-android.jpg
│ │ ├── curso-screenshot-testing-ios.jpg
│ │ ├── curso-ui-testing-android.jpg
│ │ ├── curso-ui-testing-ios.jpg
│ │ ├── ddd-en-php.jpg
│ │ ├── ddd-java.jpg
│ │ ├── docker-desde-0.jpg
│ │ ├── domain-driven-design.jpg
│ │ ├── dotfiles.jpg
│ │ ├── elastic-stack.jpg
│ │ ├── git-introduccion-trabajo-en-equipo.jpg
│ │ ├── github-actions-automatizacion.jpg
│ │ ├── github-actions-integracion-continua.jpg
│ │ ├── go-primera-app.jpg
│ │ ├── intellij.jpg
│ │ ├── iterm-productividad.jpg
│ │ ├── kubernetes-para-desarrolladores.jpg
│ │ ├── makefiles.jpg
│ │ ├── migracion-vuejs.jpg
│ │ ├── notion.jpg
│ │ ├── programacion-funcional-refactor-typeclasses.jpg
│ │ ├── prometheus.jpg
│ │ ├── reactjs-de-0-a-deploy.jpg
│ │ ├── solid.jpg
│ │ ├── terminal-zsh.jpg
│ │ ├── testing-introduccion-buenas-practicas.jpg
│ │ ├── testing-vuex.jpg
│ │ └── vistas-android.jpg
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── components
│ ├── CourseCard.vue
│ └── CourseCollection.vue
│ ├── main.js
│ ├── services
│ ├── CoursesRepository.js
│ └── courses.json
│ ├── test
│ └── Courses.spec.js
│ └── views
│ └── HomeView.vue
├── 31-testing-important-stuff
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── ErrorMessage.vue
│ └── ErrorToggle.vue
│ ├── main.js
│ ├── pageobjects
│ └── ErrorPageObject.js
│ └── test
│ ├── 01-ErrorToggle.spec.js
│ ├── 02-ErrorToggleNoShallow.spec.js
│ └── 03-ErrorTogglePageObject.spec.js
├── 32-testing-as-a-user
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── ErrorMessage.vue
│ └── ErrorToggle.vue
│ ├── main.js
│ ├── pageobjects
│ └── ErrorPageObject.js
│ └── test
│ ├── 00-ErrorToggleNoShallow.spec.js
│ ├── 01-ErrorToggleTestingLibrary.spec.js
│ └── 02-ErrorToggleTestingLibraryPageObject.spec.js
├── 34-semantic-tests
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── ErrorMessage.vue
│ └── ErrorToggle.vue
│ ├── main.js
│ └── test
│ ├── 01-ErrorToggleTestingLibrary.spec.js
│ └── 02-ErrorToggleJestDOM.spec.js
├── 41-a11y-axe
├── angular
│ ├── .browserslistrc
│ ├── .editorconfig
│ ├── .gitignore
│ ├── .npmrc
│ ├── README.md
│ ├── angular.json
│ ├── example-app
│ │ ├── app
│ │ │ ├── app.component.css
│ │ │ ├── app.component.html
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── components
│ │ │ │ ├── create-profile.component.ts
│ │ │ │ ├── form.component.ts
│ │ │ │ └── success-message.component.ts
│ │ │ ├── material.module.ts
│ │ │ └── test
│ │ │ │ ├── 00-create-profile-A11y.component.spec.ts
│ │ │ │ └── 01-create-profile.component.spec.ts
│ │ ├── assets
│ │ │ └── .gitkeep
│ │ ├── environments
│ │ │ ├── environment.prod.ts
│ │ │ └── environment.ts
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles.css
│ │ ├── test-setup.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.spec.json
│ │ └── tslint.json
│ ├── jest.config.js
│ ├── jest.preset.js
│ ├── nx.json
│ ├── package.json
│ ├── prettier.config.js
│ ├── release.config.js
│ ├── tsconfig.json
│ ├── tslint.json
│ └── yarn.lock
└── react
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ ├── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ │ ├── CreateProfile.js
│ │ ├── Form.js
│ │ └── SuccessMessage.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── services
│ │ └── userRepository.js
│ ├── setupTests.js
│ └── test
│ │ ├── 00-CreateProfileA11y.test.js
│ │ └── 01-CreateProfile.test.js
│ └── yarn.lock
├── 42-a11y-selectors
├── angular
│ ├── .browserslistrc
│ ├── .editorconfig
│ ├── .gitignore
│ ├── .npmrc
│ ├── README.md
│ ├── angular.json
│ ├── example-app
│ │ ├── app
│ │ │ ├── app.component.css
│ │ │ ├── app.component.html
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── components
│ │ │ │ ├── create-profile.component.ts
│ │ │ │ ├── form.component.ts
│ │ │ │ └── success-message.component.ts
│ │ │ ├── material.module.ts
│ │ │ └── test
│ │ │ │ └── 01-create-profile.component.spec.ts
│ │ ├── assets
│ │ │ └── .gitkeep
│ │ ├── environments
│ │ │ ├── environment.prod.ts
│ │ │ └── environment.ts
│ │ ├── favicon.ico
│ │ ├── index.html
│ │ ├── jest.config.js
│ │ ├── main.ts
│ │ ├── polyfills.ts
│ │ ├── styles.css
│ │ ├── test-setup.ts
│ │ ├── tsconfig.json
│ │ ├── tsconfig.spec.json
│ │ └── tslint.json
│ ├── jest.config.js
│ ├── jest.preset.js
│ ├── nx.json
│ ├── package.json
│ ├── prettier.config.js
│ ├── release.config.js
│ ├── tsconfig.json
│ ├── tslint.json
│ └── yarn.lock
└── react
│ ├── .eslintcache
│ ├── .gitignore
│ ├── README.md
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ ├── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ │ ├── CreateProfile.js
│ │ ├── Form.js
│ │ └── SuccessMessage.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── services
│ │ └── userRepository.js
│ ├── setupTests.js
│ └── test
│ │ └── 01-CreateProfile.test.js
│ └── yarn.lock
├── 51-test-structure
├── .eslintcache
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ │ ├── CreateProfile.js
│ │ ├── Form.js
│ │ └── SuccessMessage.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── services
│ │ └── userRepository.js
│ ├── setupTests.js
│ └── test
│ │ ├── 01-CreateProfile.test.js
│ │ └── 02-CreateProfile.test.js
└── yarn.lock
├── 52-test-description
├── .eslintcache
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ │ ├── CreateProfile.js
│ │ ├── Form.js
│ │ └── SuccessMessage.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── services
│ │ └── userRepository.js
│ ├── setupTests.js
│ └── test
│ │ ├── 01-CreateProfile.test.js
│ │ └── 02-CreateProfile.test.js
└── yarn.lock
├── 61-mocking
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── cursos
│ │ ├── bash.jpg
│ │ ├── buenas-practicas-bdd-cucumber-behat.jpg
│ │ ├── comunicacion-microservicios.jpg
│ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg
│ │ ├── css-layouts-bg.png
│ │ ├── css-layouts.jpg
│ │ ├── curso-agile-retrospectivas.jpg
│ │ ├── curso-api-http-scala.jpg
│ │ ├── curso-app-mean-webpack.jpg
│ │ ├── curso-app-vuejs-jest.jpg
│ │ ├── curso-arquitectura-hexagonal.jpg
│ │ ├── curso-aws-ec2.jpg
│ │ ├── curso-aws-escalando-apps.jpg
│ │ ├── curso-cqrs.jpg
│ │ ├── curso-introduccion-scala.jpg
│ │ ├── curso-screenshot-testing-android.jpg
│ │ ├── curso-screenshot-testing-ios.jpg
│ │ ├── curso-ui-testing-android.jpg
│ │ ├── curso-ui-testing-ios.jpg
│ │ ├── ddd-en-php.jpg
│ │ ├── ddd-java.jpg
│ │ ├── docker-desde-0.jpg
│ │ ├── domain-driven-design.jpg
│ │ ├── dotfiles.jpg
│ │ ├── elastic-stack.jpg
│ │ ├── git-introduccion-trabajo-en-equipo.jpg
│ │ ├── github-actions-automatizacion.jpg
│ │ ├── github-actions-integracion-continua.jpg
│ │ ├── go-primera-app.jpg
│ │ ├── intellij.jpg
│ │ ├── iterm-productividad.jpg
│ │ ├── kubernetes-para-desarrolladores.jpg
│ │ ├── makefiles.jpg
│ │ ├── migracion-vuejs.jpg
│ │ ├── notion.jpg
│ │ ├── programacion-funcional-refactor-typeclasses.jpg
│ │ ├── prometheus.jpg
│ │ ├── reactjs-de-0-a-deploy.jpg
│ │ ├── solid.jpg
│ │ ├── terminal-zsh.jpg
│ │ ├── testing-introduccion-buenas-practicas.jpg
│ │ ├── testing-vuex.jpg
│ │ └── vistas-android.jpg
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── components
│ ├── CourseCard.vue
│ └── CourseCollection.vue
│ ├── main.js
│ ├── services
│ ├── CoursesRepository.js
│ ├── courses.json
│ └── timeService.js
│ ├── test
│ └── Courses.spec.js
│ └── views
│ └── HomeView.vue
├── 62-mocking-fetch
├── .eslintcache
├── .gitignore
├── README.md
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── Home.js
│ ├── components
│ │ ├── Form.js
│ │ ├── Posts.js
│ │ └── PostsWithService.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── mocks
│ │ ├── handlers.js
│ │ └── server.js
│ ├── reportWebVitals.js
│ ├── services
│ │ └── postsRepository.js
│ ├── setupTests.js
│ └── tests
│ │ ├── 01-Posts.test.js
│ │ ├── 02-PostsMSW.test.js
│ │ └── 03-PostsWithService.test.js
└── yarn.lock
├── 63-animations
├── css-transition
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── .prettierrc
│ ├── README.md
│ ├── babel.config.js
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ │ ├── cursos
│ │ │ ├── bash.jpg
│ │ │ ├── buenas-practicas-bdd-cucumber-behat.jpg
│ │ │ ├── comunicacion-microservicios.jpg
│ │ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg
│ │ │ ├── css-layouts-bg.png
│ │ │ ├── css-layouts.jpg
│ │ │ ├── curso-agile-retrospectivas.jpg
│ │ │ ├── curso-api-http-scala.jpg
│ │ │ ├── curso-app-mean-webpack.jpg
│ │ │ ├── curso-app-vuejs-jest.jpg
│ │ │ ├── curso-arquitectura-hexagonal.jpg
│ │ │ ├── curso-aws-ec2.jpg
│ │ │ ├── curso-aws-escalando-apps.jpg
│ │ │ ├── curso-cqrs.jpg
│ │ │ ├── curso-introduccion-scala.jpg
│ │ │ ├── curso-screenshot-testing-android.jpg
│ │ │ ├── curso-screenshot-testing-ios.jpg
│ │ │ ├── curso-ui-testing-android.jpg
│ │ │ ├── curso-ui-testing-ios.jpg
│ │ │ ├── ddd-en-php.jpg
│ │ │ ├── ddd-java.jpg
│ │ │ ├── docker-desde-0.jpg
│ │ │ ├── domain-driven-design.jpg
│ │ │ ├── dotfiles.jpg
│ │ │ ├── elastic-stack.jpg
│ │ │ ├── git-introduccion-trabajo-en-equipo.jpg
│ │ │ ├── github-actions-automatizacion.jpg
│ │ │ ├── github-actions-integracion-continua.jpg
│ │ │ ├── go-primera-app.jpg
│ │ │ ├── intellij.jpg
│ │ │ ├── iterm-productividad.jpg
│ │ │ ├── kubernetes-para-desarrolladores.jpg
│ │ │ ├── makefiles.jpg
│ │ │ ├── migracion-vuejs.jpg
│ │ │ ├── notion.jpg
│ │ │ ├── programacion-funcional-refactor-typeclasses.jpg
│ │ │ ├── prometheus.jpg
│ │ │ ├── reactjs-de-0-a-deploy.jpg
│ │ │ ├── solid.jpg
│ │ │ ├── terminal-zsh.jpg
│ │ │ ├── testing-introduccion-buenas-practicas.jpg
│ │ │ ├── testing-vuex.jpg
│ │ │ └── vistas-android.jpg
│ │ ├── favicon.ico
│ │ └── index.html
│ └── src
│ │ ├── App.vue
│ │ ├── components
│ │ └── Post.vue
│ │ ├── main.js
│ │ └── test
│ │ └── Post.spec.js
└── time-scale
│ ├── .eslintcache
│ ├── .gitignore
│ ├── README.md
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
│ └── src
│ ├── App.css
│ ├── App.js
│ ├── components
│ ├── PostTransition.js
│ └── styles.css
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── setupTests.js
│ └── tests
│ └── 01-PostTransition.test.js
├── 71-custom-renderers
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── Comment.vue
│ ├── Comments.vue
│ ├── Header.vue
│ ├── Login.vue
│ └── NewCommentForm.vue
│ ├── i18n
│ ├── en.js
│ └── es.js
│ ├── main.js
│ ├── services
│ ├── commentsRepository.js
│ └── userRepository.js
│ ├── store
│ └── index.js
│ └── test
│ ├── 00-Comments.spec.js
│ ├── 00-Login.spec.js
│ ├── 01-Comments-Renderer.spec.js
│ ├── 02-Comments-RendererFromFile.spec.js
│ ├── 02-Login.spec.js
│ ├── 03-Header-i18n.spec.js
│ └── test-utils.js
├── 72-test-object-factory
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── assets
│ └── logo.png
│ ├── components
│ ├── Comment.vue
│ ├── Comments.vue
│ ├── Login.vue
│ └── NewCommentForm.vue
│ ├── main.js
│ ├── services
│ ├── commentsRepository.js
│ └── userRepository.js
│ ├── store
│ └── index.js
│ └── test
│ ├── 00-Comments.spec.js
│ ├── 00-Login.spec.js
│ ├── 01-CommentsWithFactory.spec.js
│ ├── 01-LoginWithFactory.spec.js
│ ├── factories
│ ├── comment.js
│ └── user.js
│ └── test-utils.js
├── 73-snapshots
├── .browserslistrc
├── .editorconfig
├── .gitignore
├── .npmrc
├── README.md
├── angular.json
├── example-app
│ ├── app
│ │ ├── app.component.css
│ │ ├── app.component.html
│ │ ├── app.component.ts
│ │ ├── app.module.ts
│ │ ├── components
│ │ │ ├── comment.component.ts
│ │ │ └── comments.component.ts
│ │ ├── material.module.ts
│ │ ├── models
│ │ │ ├── comment.model.ts
│ │ │ └── user.model.ts
│ │ ├── services
│ │ │ └── CommentRepository.service.ts
│ │ └── test
│ │ │ ├── 01-comment-snapshot.component.spec.ts
│ │ │ ├── 02-comments-snapshot.component.spec.ts
│ │ │ ├── 03-comments.component.spec.ts
│ │ │ └── factories
│ │ │ ├── comment.ts
│ │ │ └── user.ts
│ ├── assets
│ │ └── .gitkeep
│ ├── environments
│ │ ├── environment.prod.ts
│ │ └── environment.ts
│ ├── favicon.ico
│ ├── index.html
│ ├── jest.config.js
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.css
│ ├── test-setup.ts
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tslint.json
├── jest.config.js
├── jest.preset.js
├── nx.json
├── package.json
├── prettier.config.js
├── release.config.js
├── tsconfig.json
├── tslint.json
└── yarn.lock
├── 82-TDD
├── .browserslistrc
├── .eslintrc.js
├── .gitignore
├── .prettierrc
├── README.md
├── babel.config.js
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── cursos
│ │ ├── bash.jpg
│ │ ├── buenas-practicas-bdd-cucumber-behat.jpg
│ │ ├── comunicacion-microservicios.jpg
│ │ ├── cqrs-event-sourcing-kotlin-axon-framework.jpg
│ │ ├── css-layouts-bg.png
│ │ ├── css-layouts.jpg
│ │ ├── curso-agile-retrospectivas.jpg
│ │ ├── curso-api-http-scala.jpg
│ │ ├── curso-app-mean-webpack.jpg
│ │ ├── curso-app-vuejs-jest.jpg
│ │ ├── curso-arquitectura-hexagonal.jpg
│ │ ├── curso-aws-ec2.jpg
│ │ ├── curso-aws-escalando-apps.jpg
│ │ ├── curso-cqrs.jpg
│ │ ├── curso-introduccion-scala.jpg
│ │ ├── curso-screenshot-testing-android.jpg
│ │ ├── curso-screenshot-testing-ios.jpg
│ │ ├── curso-ui-testing-android.jpg
│ │ ├── curso-ui-testing-ios.jpg
│ │ ├── ddd-en-php.jpg
│ │ ├── ddd-java.jpg
│ │ ├── docker-desde-0.jpg
│ │ ├── domain-driven-design.jpg
│ │ ├── dotfiles.jpg
│ │ ├── elastic-stack.jpg
│ │ ├── git-introduccion-trabajo-en-equipo.jpg
│ │ ├── github-actions-automatizacion.jpg
│ │ ├── github-actions-integracion-continua.jpg
│ │ ├── go-primera-app.jpg
│ │ ├── intellij.jpg
│ │ ├── iterm-productividad.jpg
│ │ ├── kubernetes-para-desarrolladores.jpg
│ │ ├── makefiles.jpg
│ │ ├── migracion-vuejs.jpg
│ │ ├── notion.jpg
│ │ ├── programacion-funcional-refactor-typeclasses.jpg
│ │ ├── prometheus.jpg
│ │ ├── reactjs-de-0-a-deploy.jpg
│ │ ├── solid.jpg
│ │ ├── terminal-zsh.jpg
│ │ ├── testing-introduccion-buenas-practicas.jpg
│ │ ├── testing-vuex.jpg
│ │ └── vistas-android.jpg
│ ├── favicon.ico
│ └── index.html
└── src
│ ├── App.vue
│ ├── components
│ ├── Article.vue
│ ├── ArticleContent.vue
│ ├── Comment.vue
│ └── Comments.vue
│ ├── main.js
│ ├── services
│ ├── articlesRepository.js
│ └── commentsRepository.js
│ ├── test
│ ├── Article.spec.js
│ └── factories
│ │ ├── article.js
│ │ └── comment.js
│ └── views
│ └── ArticleView.vue
├── 91-ci
├── .eslintcache
├── .gitignore
├── README.md
├── jest.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── Home.js
│ ├── components
│ │ ├── Form.js
│ │ └── Posts.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ ├── services
│ │ └── postsRepository.js
│ ├── setupTests.js
│ └── tests
│ │ └── Posts.test.js
└── yarn.lock
├── Q&A
├── vanilla-js
│ ├── .eslintrc
│ ├── .github
│ │ └── workflows
│ │ │ ├── lint.yml
│ │ │ └── test.yml
│ ├── .gitignore
│ ├── .prettierrc
│ ├── LICENSE
│ ├── README.md
│ ├── babel.config.json
│ ├── cypress.json
│ ├── index.html
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ │ ├── assets
│ │ │ ├── css
│ │ │ │ └── normalize.css
│ │ │ └── images
│ │ │ │ └── logo-codelytv-light.png
│ │ ├── index.js
│ │ └── users.js
│ ├── tests
│ │ ├── .eslintrc
│ │ └── users.spec.js
│ ├── webpack.common.js
│ ├── webpack.dev.js
│ └── webpack.prod.js
└── vuetify-example
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .gitignore
│ ├── README.md
│ ├── babel.config.js
│ ├── jest.config.js
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ ├── favicon.ico
│ └── index.html
│ ├── src
│ ├── App.vue
│ ├── assets
│ │ ├── logo.png
│ │ └── logo.svg
│ ├── components
│ │ └── StateForm.vue
│ ├── main.js
│ └── plugins
│ │ └── vuetify.js
│ ├── tests
│ └── unit
│ │ ├── StateForm.spec.js
│ │ └── test-utils.js
│ └── vue.config.js
└── README.md
/11-testing-problems/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | ["env", {
4 | "modules": false,
5 | "targets": {
6 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
7 | }
8 | }],
9 | "stage-2"
10 | ],
11 | "plugins": ["transform-runtime"],
12 | "env": {
13 | "test": {
14 | "presets": ["env", "stage-2"]
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/11-testing-problems/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/11-testing-problems/.eslintignore:
--------------------------------------------------------------------------------
1 | build/*.js
2 | config/*.js
3 |
--------------------------------------------------------------------------------
/11-testing-problems/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | *.suo
11 | *.ntvs*
12 | *.njsproj
13 | *.sln
14 |
--------------------------------------------------------------------------------
/11-testing-problems/build/dev-client.js:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | require("eventsource-polyfill");
3 | var hotClient = require("webpack-hot-middleware/client?noInfo=true&reload=true");
4 |
5 | hotClient.subscribe(function(event) {
6 | if (event.action === "reload") {
7 | window.location.reload();
8 | }
9 | });
10 |
--------------------------------------------------------------------------------
/11-testing-problems/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | var utils = require("./utils");
2 | var config = require("../config");
3 | var isProduction = process.env.NODE_ENV === "production";
4 |
5 | module.exports = {
6 | loaders: utils.cssLoaders({
7 | sourceMap: isProduction
8 | ? config.build.productionSourceMap
9 | : config.dev.cssSourceMap,
10 | extract: isProduction
11 | }),
12 | transformToRequire: {
13 | video: "src",
14 | source: "src",
15 | img: "src",
16 | image: "xlink:href"
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/11-testing-problems/circle.yml:
--------------------------------------------------------------------------------
1 | machine:
2 | node:
3 | version: 6
4 |
--------------------------------------------------------------------------------
/11-testing-problems/config/dev.env.js:
--------------------------------------------------------------------------------
1 | var merge = require("webpack-merge");
2 | var prodEnv = require("./prod.env");
3 |
4 | module.exports = merge(prodEnv, {
5 | NODE_ENV: '"development"'
6 | });
7 |
--------------------------------------------------------------------------------
/11-testing-problems/config/prod.env.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | NODE_ENV: '"production"'
3 | };
4 |
--------------------------------------------------------------------------------
/11-testing-problems/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | vue-test-utils-jest-example
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/11-testing-problems/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
--------------------------------------------------------------------------------
/11-testing-problems/src/components/List.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 | {{ item }}
5 |
6 |
7 |
8 |
9 |
15 |
--------------------------------------------------------------------------------
/11-testing-problems/src/components/Message.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: "message",
3 | functional: true,
4 | props: ["msg"],
5 | render: (h, { props }) => h("h1", props.msg || "default message")
6 | };
7 |
--------------------------------------------------------------------------------
/11-testing-problems/src/components/MessageToggle.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
28 |
--------------------------------------------------------------------------------
/11-testing-problems/src/components/Page.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
20 |
--------------------------------------------------------------------------------
/11-testing-problems/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from "vue";
4 | import App from "./App";
5 | import router from "./router";
6 |
7 | Vue.config.productionTip = false;
8 |
9 | /* eslint-disable no-new */
10 | new Vue({
11 | el: "#app",
12 | router,
13 | template: "",
14 | components: { App }
15 | });
16 |
--------------------------------------------------------------------------------
/11-testing-problems/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import Router from "vue-router";
3 | import Page from "@/components/Page";
4 |
5 | Vue.use(Router);
6 |
7 | export default new Router({
8 | routes: [
9 | {
10 | path: "/",
11 | name: "Page",
12 | component: Page
13 | }
14 | ]
15 | });
16 |
--------------------------------------------------------------------------------
/11-testing-problems/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true
4 | },
5 | "globals": {
6 | "expect": true,
7 | "sinon": true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/11-testing-problems/test/specs/Message.spec.js:
--------------------------------------------------------------------------------
1 | import { shallowMount } from "@vue/test-utils";
2 | import Message from "@/components/Message";
3 |
4 | describe("Message.vue", () => {
5 | it("renders props.msg when passed", () => {
6 | const msg = "new message";
7 | const wrapper = shallowMount(Message, {
8 | context: { props: { msg } },
9 | });
10 | expect(wrapper.text()).toBe(msg);
11 | });
12 |
13 | it("renders default message if not passed a prop", () => {
14 | const defaultMessage = "default message";
15 | const wrapper = shallowMount(Message, { context: {} });
16 | expect(wrapper.text()).toBe(defaultMessage);
17 | });
18 | });
19 |
--------------------------------------------------------------------------------
/11-testing-problems/test/specs/__snapshots__/List.spec.js.snap:
--------------------------------------------------------------------------------
1 | // Jest Snapshot v1, https://goo.gl/fbAQLP
2 |
3 | exports[`List.vue matches snapshot 1`] = `
4 |
5 | -
6 | item 1
7 |
8 | -
9 | item 2
10 |
11 |
12 | `;
13 |
--------------------------------------------------------------------------------
/12-first-test/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/12-first-test/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/*.test.js"],
3 | };
4 |
--------------------------------------------------------------------------------
/12-first-test/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/favicon.ico
--------------------------------------------------------------------------------
/12-first-test/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/logo192.png
--------------------------------------------------------------------------------
/12-first-test/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/12-first-test/public/logo512.png
--------------------------------------------------------------------------------
/12-first-test/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/12-first-test/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/12-first-test/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import Posts from "./components/Posts";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/12-first-test/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/12-first-test/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/12-first-test/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/12-first-test/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/21-frameworks/angular/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/21-frameworks/angular/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from 'protractor';
2 |
3 | export class AppPage {
4 | async navigateTo(): Promise {
5 | return browser.get(browser.baseUrl);
6 | }
7 |
8 | async getTitleText(): Promise {
9 | return element(by.css('app-root .content span')).getText();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/21-frameworks/angular/e2e/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "../tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "../out-tsc/e2e",
6 | "module": "commonjs",
7 | "target": "es2018",
8 | "types": [
9 | "jasmine",
10 | "node"
11 | ]
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/21-frameworks/angular/jest.config.js:
--------------------------------------------------------------------------------
1 | // require("jest-preset-angular/ngcc-jest-processor");
2 |
3 | module.exports = {
4 | preset: "jest-preset-angular",
5 | setupFilesAfterEnv: ["/setup-jest.ts"],
6 | };
7 |
--------------------------------------------------------------------------------
/21-frameworks/angular/setup-jest.ts:
--------------------------------------------------------------------------------
1 | import "jest-preset-angular";
2 | import "./jest-global-mocks"; // browser mocks globally available for every test
3 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/app/app.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/app/app.component.css
--------------------------------------------------------------------------------
/21-frameworks/angular/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | styleUrls: ['./app.component.css'],
6 | template: `
7 |
8 |
9 |
10 | `,
11 | })
12 | export class AppComponent {
13 | title = 'angular';
14 | }
15 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule } from '@angular/core';
3 |
4 | import { AppComponent } from './app.component';
5 | import { PostsComponent } from './components/posts.component';
6 | import { FormComponent } from './components/form.component';
7 |
8 | @NgModule({
9 | declarations: [
10 | AppComponent,
11 | PostsComponent,
12 | FormComponent
13 | ],
14 | imports: [
15 | BrowserModule
16 | ],
17 | providers: [],
18 | bootstrap: [AppComponent]
19 | })
20 | export class AppModule { }
21 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/assets/.gitkeep
--------------------------------------------------------------------------------
/21-frameworks/angular/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/angular/src/favicon.ico
--------------------------------------------------------------------------------
/21-frameworks/angular/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Angular
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.error(err));
13 |
--------------------------------------------------------------------------------
/21-frameworks/angular/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/21-frameworks/angular/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": []
7 | },
8 | "files": [
9 | "src/main.ts",
10 | "src/polyfills.ts"
11 | ],
12 | "include": [
13 | "src/**/*.d.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/21-frameworks/angular/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "sourceMap": true,
8 | "declaration": false,
9 | "downlevelIteration": true,
10 | "experimentalDecorators": true,
11 | "moduleResolution": "node",
12 | "importHelpers": true,
13 | "target": "es2015",
14 | "module": "es2020",
15 | "lib": [
16 | "es2018",
17 | "dom"
18 | ]
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/21-frameworks/angular/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jest"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/21-frameworks/react/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/21-frameworks/react/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/favicon.ico
--------------------------------------------------------------------------------
/21-frameworks/react/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/logo192.png
--------------------------------------------------------------------------------
/21-frameworks/react/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/react/public/logo512.png
--------------------------------------------------------------------------------
/21-frameworks/react/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/21-frameworks/react/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/21-frameworks/react/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import Posts from "./components/Posts";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/21-frameworks/react/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/21-frameworks/react/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/21-frameworks/react/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/21-frameworks/react/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/21-frameworks/vue/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/21-frameworks/vue/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"],
7 | parserOptions: {
8 | parser: "babel-eslint"
9 | },
10 | rules: {
11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off"
13 | },
14 | overrides: [
15 | {
16 | files: [
17 | "**/__tests__/*.{j,t}s?(x)",
18 | "**/tests/unit/**/*.spec.{j,t}s?(x)"
19 | ],
20 | env: {
21 | jest: true
22 | }
23 | }
24 | ]
25 | };
26 |
--------------------------------------------------------------------------------
/21-frameworks/vue/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/21-frameworks/vue/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/21-frameworks/vue/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/21-frameworks/vue/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/21-frameworks/vue/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/vue/public/favicon.ico
--------------------------------------------------------------------------------
/21-frameworks/vue/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
26 |
--------------------------------------------------------------------------------
/21-frameworks/vue/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/21-frameworks/vue/src/assets/logo.png
--------------------------------------------------------------------------------
/21-frameworks/vue/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/22-unit-test/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/22-unit-test/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"],
7 | parserOptions: {
8 | parser: "babel-eslint"
9 | },
10 | rules: {
11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off"
13 | },
14 | overrides: [
15 | {
16 | files: [
17 | "**/__tests__/*.{j,t}s?(x)",
18 | "**/tests/unit/**/*.spec.{j,t}s?(x)"
19 | ],
20 | env: {
21 | jest: true
22 | }
23 | }
24 | ]
25 | };
26 |
--------------------------------------------------------------------------------
/22-unit-test/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/22-unit-test/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all"
3 | }
4 |
--------------------------------------------------------------------------------
/22-unit-test/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/22-unit-test/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/22-unit-test/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/bash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/bash.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/comunicacion-microservicios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/comunicacion-microservicios.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/css-layouts-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/css-layouts-bg.png
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/css-layouts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/css-layouts.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-agile-retrospectivas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-agile-retrospectivas.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-api-http-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-api-http-scala.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-app-mean-webpack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-app-mean-webpack.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-app-vuejs-jest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-app-vuejs-jest.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-arquitectura-hexagonal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-arquitectura-hexagonal.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-aws-ec2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-aws-ec2.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-aws-escalando-apps.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-aws-escalando-apps.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-cqrs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-cqrs.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-introduccion-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-introduccion-scala.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-screenshot-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-screenshot-testing-android.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-screenshot-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-screenshot-testing-ios.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-ui-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-ui-testing-android.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/curso-ui-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/curso-ui-testing-ios.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/ddd-en-php.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/ddd-en-php.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/ddd-java.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/ddd-java.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/docker-desde-0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/docker-desde-0.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/domain-driven-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/domain-driven-design.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/dotfiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/dotfiles.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/elastic-stack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/elastic-stack.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/git-introduccion-trabajo-en-equipo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/git-introduccion-trabajo-en-equipo.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/github-actions-automatizacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/github-actions-automatizacion.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/github-actions-integracion-continua.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/github-actions-integracion-continua.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/go-primera-app.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/go-primera-app.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/intellij.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/intellij.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/iterm-productividad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/iterm-productividad.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/kubernetes-para-desarrolladores.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/kubernetes-para-desarrolladores.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/makefiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/makefiles.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/migracion-vuejs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/migracion-vuejs.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/notion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/notion.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/programacion-funcional-refactor-typeclasses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/programacion-funcional-refactor-typeclasses.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/prometheus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/prometheus.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/reactjs-de-0-a-deploy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/reactjs-de-0-a-deploy.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/solid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/solid.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/terminal-zsh.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/terminal-zsh.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/testing-introduccion-buenas-practicas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/testing-introduccion-buenas-practicas.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/testing-vuex.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/testing-vuex.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/cursos/vistas-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/cursos/vistas-android.jpg
--------------------------------------------------------------------------------
/22-unit-test/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/22-unit-test/public/favicon.ico
--------------------------------------------------------------------------------
/22-unit-test/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
26 |
--------------------------------------------------------------------------------
/22-unit-test/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/22-unit-test/src/services/CoursesRepository.js:
--------------------------------------------------------------------------------
1 | import courses from "./courses.json";
2 |
3 | export default class CoursesRepository {
4 | searchAll() {
5 | return new Promise(resolve => {
6 | resolve(courses);
7 | });
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/22-unit-test/src/views/HomeView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/README.md:
--------------------------------------------------------------------------------
1 | # Resilient tests with Testing Library
2 |
3 | ## Project setup
4 |
5 | ```
6 | npm install
7 | ```
8 |
9 | ### Compiles and hot-reloads for development
10 |
11 | ```
12 | npm run serve
13 | ```
14 |
15 | ### Compiles and minifies for production
16 |
17 | ```
18 | npm run build
19 | ```
20 |
21 | ### Run your unit tests
22 |
23 | ```
24 | npm run test:unit
25 | ```
26 |
27 | ### Lints and fixes files
28 |
29 | ```
30 | npm run lint
31 | ```
32 |
33 | ### Customize configuration
34 |
35 | See [Configuration Reference](https://cli.vuejs.org/config/).
36 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/31-testing-important-stuff/public/favicon.ico
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/31-testing-important-stuff/src/assets/logo.png
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/components/ErrorMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ msg }}
4 |
5 |
6 |
7 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/pageobjects/ErrorPageObject.js:
--------------------------------------------------------------------------------
1 | import { nextTick } from "vue";
2 |
3 | export default class ErrorPageObject {
4 | constructor(wrapper) {
5 | this.wrapper = wrapper;
6 | }
7 |
8 | text() {
9 | return this.wrapper.text();
10 | }
11 |
12 | async wait() {
13 | await nextTick();
14 | }
15 |
16 | hasErrorMessage() {
17 | return this.wrapper.find('[data-test-id="message"]').exists();
18 | }
19 |
20 | clickToggleButton() {
21 | this.wrapper.find(['data-test-id="toggle-message"]').trigger("click");
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/31-testing-important-stuff/src/test/01-ErrorToggle.spec.js:
--------------------------------------------------------------------------------
1 | import { shallowMount } from "@vue/test-utils";
2 | import ErrorToggle from "@/components/ErrorToggle.vue";
3 |
4 | describe("Error Toggle", () => {
5 | it("should toggle open property when button is clicked", async () => {
6 | const wrapper = shallowMount(ErrorToggle);
7 | const button = wrapper.find("#toggle-message");
8 |
9 | button.trigger("click");
10 | expect(wrapper.vm.open).toBe(true);
11 |
12 | button.trigger("click");
13 | expect(wrapper.vm.open).toBe(false);
14 | });
15 | });
16 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/README.md:
--------------------------------------------------------------------------------
1 | # Resilient tests with Testing Library
2 |
3 | ## Project setup
4 |
5 | ```
6 | npm install
7 | ```
8 |
9 | ### Compiles and hot-reloads for development
10 |
11 | ```
12 | npm run serve
13 | ```
14 |
15 | ### Compiles and minifies for production
16 |
17 | ```
18 | npm run build
19 | ```
20 |
21 | ### Run your unit tests
22 |
23 | ```
24 | npm run test:unit
25 | ```
26 |
27 | ### Lints and fixes files
28 |
29 | ```
30 | npm run lint
31 | ```
32 |
33 | ### Customize configuration
34 |
35 | See [Configuration Reference](https://cli.vuejs.org/config/).
36 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/32-testing-as-a-user/public/favicon.ico
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/32-testing-as-a-user/src/assets/logo.png
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/components/ErrorMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ msg }}
4 |
5 |
6 |
7 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/pageobjects/ErrorPageObject.js:
--------------------------------------------------------------------------------
1 | import { render, fireEvent, screen } from "@testing-library/vue";
2 |
3 | export default class ErrorPageObject {
4 | constructor(component) {
5 | render(component);
6 | }
7 |
8 | hasErrorMessage() {
9 | return !!screen.queryByRole("alert");
10 | }
11 |
12 | errorMessageText() {
13 | return screen.getByRole("alert").innerHTML;
14 | }
15 |
16 | async clickToggleButton() {
17 | const button = screen.getByRole("button", { name: /toggle/i });
18 | await fireEvent.click(button);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/32-testing-as-a-user/src/test/02-ErrorToggleTestingLibraryPageObject.spec.js:
--------------------------------------------------------------------------------
1 | import ErrorToggle from "@/components/ErrorToggle.vue";
2 | import ErrorPageObject from "@/pageobjects/ErrorPageObject";
3 |
4 | describe("Error Toggle", () => {
5 | it("should toggle contact message when button is clicked", async () => {
6 | const page = new ErrorPageObject(ErrorToggle);
7 |
8 | await page.clickToggleButton();
9 |
10 | expect(page.hasErrorMessage()).toBe(true);
11 | expect(page.errorMessageText()).toMatch(/contact us/i);
12 |
13 | await page.clickToggleButton();
14 |
15 | expect(page.hasErrorMessage()).toBe(false);
16 | });
17 | });
18 |
--------------------------------------------------------------------------------
/34-semantic-tests/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/34-semantic-tests/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/34-semantic-tests/README.md:
--------------------------------------------------------------------------------
1 | # Semantic tests with Testing Library
2 |
3 | ## Project setup
4 |
5 | ```
6 | npm install
7 | ```
8 |
9 | ### Compiles and hot-reloads for development
10 |
11 | ```
12 | npm run serve
13 | ```
14 |
15 | ### Compiles and minifies for production
16 |
17 | ```
18 | npm run build
19 | ```
20 |
21 | ### Run your unit tests
22 |
23 | ```
24 | npm run test:unit
25 | ```
26 |
27 | ### Lints and fixes files
28 |
29 | ```
30 | npm run lint
31 | ```
32 |
33 | ### Customize configuration
34 |
35 | See [Configuration Reference](https://cli.vuejs.org/config/).
36 |
--------------------------------------------------------------------------------
/34-semantic-tests/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/34-semantic-tests/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/34-semantic-tests/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/34-semantic-tests/public/favicon.ico
--------------------------------------------------------------------------------
/34-semantic-tests/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/34-semantic-tests/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/34-semantic-tests/src/assets/logo.png
--------------------------------------------------------------------------------
/34-semantic-tests/src/components/ErrorMessage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ msg }}
4 |
5 |
6 |
7 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/34-semantic-tests/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed
5 | > 0.5%
6 | last 2 versions
7 | Firefox ESR
8 | not dead
9 | # IE 9-11
--------------------------------------------------------------------------------
/41-a11y-axe/angular/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/.npmrc:
--------------------------------------------------------------------------------
1 | registry=http://registry.npmjs.org/
2 | package-lock=false
3 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/README.md:
--------------------------------------------------------------------------------
1 | # Angular
2 |
3 | Configuration based on [Angular Testing Library examples]()
4 |
5 | ## Run dev mode
6 |
7 | ```
8 | npm run start
9 | ```
10 |
11 | ## Run tests
12 |
13 | ```
14 | npm run test
15 | ```
16 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/app/app.component.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | position: absolute;
5 | top: 0;
6 | bottom: 0;
7 | left: 0;
8 | right: 0;
9 | }
10 |
11 | .sidenav {
12 | flex: 1;
13 | }
14 |
15 | .sidenav-container {
16 | padding: 10px;
17 | }
18 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['app.component.css'],
7 | })
8 | export class AppComponent {
9 | }
10 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/app/components/success-message.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Input } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'success-message',
5 | template: `
6 | Thank you {{ user.name }}!
`,
7 | })
8 | export class SuccessMessageComponent {
9 | @Input() user;
10 | }
11 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/app/material.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { MatInputModule } from '@angular/material/input';
4 | import { MatSelectModule } from '@angular/material/select';
5 |
6 | @NgModule({
7 | exports: [MatInputModule, MatSelectModule],
8 | })
9 | export class MaterialModule {}
10 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/angular/example-app/assets/.gitkeep
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true,
3 | };
4 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/angular/example-app/favicon.ico
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AngularTestingLibraryApp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | name: 'Example App',
3 | displayName: {
4 | name: 'Example',
5 | color: 'blue',
6 | },
7 | preset: '../jest.preset.js',
8 | };
9 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch((err) => console.log(err));
14 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/styles.css:
--------------------------------------------------------------------------------
1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css';
2 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular';
2 | import '@testing-library/jest-dom';
3 | import { configure } from '@testing-library/angular';
4 | import { ReactiveFormsModule } from '@angular/forms';
5 |
6 | configure({
7 | defaultImports: [ReactiveFormsModule],
8 | });
9 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "types": [],
6 | "allowJs": true
7 | },
8 | "files": ["main.ts", "polyfills.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "types": ["node", "jest"]
6 | },
7 | "files": ["test-setup.ts"],
8 | "include": ["**/*.spec.ts", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/example-app/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "app", "camelCase"],
5 | "component-selector": [true, "element", "app", "kebab-case"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | projects: ['/'],
3 | };
4 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | printWidth: 120,
3 | tabWidth: 2,
4 | useTabs: false,
5 | semi: true,
6 | singleQuote: true,
7 | trailingComma: 'all',
8 | bracketSpacing: true,
9 | };
10 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/release.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | pkgRoot: 'dist/@testing-library/angular',
3 | branches: ['master', { name: 'beta', prerelease: true }],
4 | };
5 |
--------------------------------------------------------------------------------
/41-a11y-axe/angular/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "importHelpers": true,
6 | "module": "esnext",
7 | "outDir": "./dist/out-tsc",
8 | "sourceMap": true,
9 | "declaration": false,
10 | "moduleResolution": "node",
11 | "emitDecoratorMetadata": true,
12 | "experimentalDecorators": true,
13 | "target": "es2015",
14 | "typeRoots": ["node_modules/@types"],
15 | "lib": ["es2017", "dom"]
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/favicon.ico
--------------------------------------------------------------------------------
/41-a11y-axe/react/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/logo192.png
--------------------------------------------------------------------------------
/41-a11y-axe/react/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/41-a11y-axe/react/public/logo512.png
--------------------------------------------------------------------------------
/41-a11y-axe/react/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import CreateProfile from "./components/CreateProfile";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/components/SuccessMessage.js:
--------------------------------------------------------------------------------
1 | function SuccessMessage(props) {
2 | return Thank you {props.user.name}!
;
3 | }
4 |
5 | export default SuccessMessage;
6 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export function createUser(details) {
2 | return new Promise((resolve) => {
3 | resolve(details);
4 | });
5 | }
6 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/41-a11y-axe/react/src/test/00-CreateProfileA11y.test.js:
--------------------------------------------------------------------------------
1 | import { axe, toHaveNoViolations } from "jest-axe";
2 | import { render } from "@testing-library/react";
3 | import CreateProfile from "../components/CreateProfile";
4 |
5 | expect.extend(toHaveNoViolations);
6 |
7 | describe("CreateProfile component", () => {
8 | it("should be accessible", async () => {
9 | const { container } = render();
10 |
11 | expect(await axe(container)).toHaveNoViolations();
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed
5 | > 0.5%
6 | last 2 versions
7 | Firefox ESR
8 | not dead
9 | # IE 9-11
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/.npmrc:
--------------------------------------------------------------------------------
1 | registry=http://registry.npmjs.org/
2 | package-lock=false
3 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/README.md:
--------------------------------------------------------------------------------
1 | # Angular
2 |
3 | Configuration based on [Angular Testing Library examples](https://github.com/testing-library/angular-testing-library/)
4 |
5 | ## Run dev mode
6 |
7 | ```
8 | npm run start
9 | ```
10 |
11 | ## Run tests
12 |
13 | ```
14 | npm run test
15 | ```
16 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/app/app.component.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | position: absolute;
5 | top: 0;
6 | bottom: 0;
7 | left: 0;
8 | right: 0;
9 | }
10 |
11 | .sidenav {
12 | flex: 1;
13 | }
14 |
15 | .sidenav-container {
16 | padding: 10px;
17 | }
18 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['app.component.css'],
7 | })
8 | export class AppComponent {
9 | }
10 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/app/components/success-message.component.ts:
--------------------------------------------------------------------------------
1 | import { Component, Input } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'success-message',
5 | template: `
6 | Thank you {{ user.name }}!
`,
7 | })
8 | export class SuccessMessageComponent {
9 | @Input() user;
10 | }
11 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/app/material.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { MatInputModule } from '@angular/material/input';
4 | import { MatSelectModule } from '@angular/material/select';
5 |
6 | @NgModule({
7 | exports: [MatInputModule, MatSelectModule],
8 | })
9 | export class MaterialModule {}
10 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/angular/example-app/assets/.gitkeep
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true,
3 | };
4 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/angular/example-app/favicon.ico
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AngularTestingLibraryApp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | name: 'Example App',
3 | displayName: {
4 | name: 'Example',
5 | color: 'blue',
6 | },
7 | preset: '../jest.preset.js',
8 | };
9 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch((err) => console.log(err));
14 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/styles.css:
--------------------------------------------------------------------------------
1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css';
2 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular';
2 | import '@testing-library/jest-dom';
3 | import { configure } from '@testing-library/angular';
4 | import { ReactiveFormsModule } from '@angular/forms';
5 |
6 | configure({
7 | defaultImports: [ReactiveFormsModule],
8 | });
9 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "types": [],
6 | "allowJs": true
7 | },
8 | "files": ["main.ts", "polyfills.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "types": ["node", "jest"]
6 | },
7 | "files": ["test-setup.ts"],
8 | "include": ["**/*.spec.ts", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/example-app/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "app", "camelCase"],
5 | "component-selector": [true, "element", "app", "kebab-case"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | projects: ['/'],
3 | };
4 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | printWidth: 120,
3 | tabWidth: 2,
4 | useTabs: false,
5 | semi: true,
6 | singleQuote: true,
7 | trailingComma: 'all',
8 | bracketSpacing: true,
9 | };
10 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/release.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | pkgRoot: 'dist/@testing-library/angular',
3 | branches: ['master', { name: 'beta', prerelease: true }],
4 | };
5 |
--------------------------------------------------------------------------------
/42-a11y-selectors/angular/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "importHelpers": true,
6 | "module": "esnext",
7 | "outDir": "./dist/out-tsc",
8 | "sourceMap": true,
9 | "declaration": false,
10 | "moduleResolution": "node",
11 | "emitDecoratorMetadata": true,
12 | "experimentalDecorators": true,
13 | "target": "es2015",
14 | "typeRoots": ["node_modules/@types"],
15 | "lib": ["es2017", "dom"]
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/favicon.ico
--------------------------------------------------------------------------------
/42-a11y-selectors/react/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/logo192.png
--------------------------------------------------------------------------------
/42-a11y-selectors/react/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/42-a11y-selectors/react/public/logo512.png
--------------------------------------------------------------------------------
/42-a11y-selectors/react/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import CreateProfile from "./components/CreateProfile";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/components/SuccessMessage.js:
--------------------------------------------------------------------------------
1 | function SuccessMessage(props) {
2 | return Thank you {props.user.name}!
;
3 | }
4 |
5 | export default SuccessMessage;
6 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export function createUser(details) {
2 | return new Promise((resolve) => {
3 | resolve(details);
4 | });
5 | }
6 |
--------------------------------------------------------------------------------
/42-a11y-selectors/react/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/51-test-structure/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/51-test-structure/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/favicon.ico
--------------------------------------------------------------------------------
/51-test-structure/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/logo192.png
--------------------------------------------------------------------------------
/51-test-structure/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/51-test-structure/public/logo512.png
--------------------------------------------------------------------------------
/51-test-structure/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/51-test-structure/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/51-test-structure/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import CreateProfile from "./components/CreateProfile";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/51-test-structure/src/components/SuccessMessage.js:
--------------------------------------------------------------------------------
1 | function SuccessMessage(props) {
2 | return Thank you {props.user.name}!
;
3 | }
4 |
5 | export default SuccessMessage;
6 |
--------------------------------------------------------------------------------
/51-test-structure/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/51-test-structure/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/51-test-structure/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/51-test-structure/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export function createUser(details) {
2 | return new Promise((resolve) => {
3 | resolve(details);
4 | });
5 | }
6 |
--------------------------------------------------------------------------------
/51-test-structure/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/52-test-description/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/52-test-description/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/favicon.ico
--------------------------------------------------------------------------------
/52-test-description/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/logo192.png
--------------------------------------------------------------------------------
/52-test-description/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/52-test-description/public/logo512.png
--------------------------------------------------------------------------------
/52-test-description/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/52-test-description/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/52-test-description/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import CreateProfile from "./components/CreateProfile";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/52-test-description/src/components/SuccessMessage.js:
--------------------------------------------------------------------------------
1 | function SuccessMessage(props) {
2 | return Thank you {props.user.name}!
;
3 | }
4 |
5 | export default SuccessMessage;
6 |
--------------------------------------------------------------------------------
/52-test-description/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/52-test-description/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/52-test-description/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/52-test-description/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export function createUser(details) {
2 | return new Promise((resolve) => {
3 | resolve(details);
4 | });
5 | }
6 |
--------------------------------------------------------------------------------
/52-test-description/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/61-mocking/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/61-mocking/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true
5 | },
6 | extends: ["plugin:vue/vue3-essential", "eslint:recommended", "@vue/prettier"],
7 | parserOptions: {
8 | parser: "babel-eslint"
9 | },
10 | rules: {
11 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
12 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off"
13 | },
14 | overrides: [
15 | {
16 | files: [
17 | "**/__tests__/*.{j,t}s?(x)",
18 | "**/tests/unit/**/*.spec.{j,t}s?(x)"
19 | ],
20 | env: {
21 | jest: true
22 | }
23 | }
24 | ]
25 | };
26 |
--------------------------------------------------------------------------------
/61-mocking/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/61-mocking/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all"
3 | }
4 |
--------------------------------------------------------------------------------
/61-mocking/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/61-mocking/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/61-mocking/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | restoreMocks: true,
8 | };
9 |
--------------------------------------------------------------------------------
/61-mocking/public/cursos/bash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/bash.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/comunicacion-microservicios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/comunicacion-microservicios.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/css-layouts-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/css-layouts-bg.png
--------------------------------------------------------------------------------
/61-mocking/public/cursos/css-layouts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/css-layouts.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-agile-retrospectivas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-agile-retrospectivas.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-api-http-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-api-http-scala.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-app-mean-webpack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-app-mean-webpack.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-app-vuejs-jest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-app-vuejs-jest.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-arquitectura-hexagonal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-arquitectura-hexagonal.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-aws-ec2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-aws-ec2.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-aws-escalando-apps.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-aws-escalando-apps.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-cqrs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-cqrs.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-introduccion-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-introduccion-scala.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-screenshot-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-screenshot-testing-android.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-screenshot-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-screenshot-testing-ios.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-ui-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-ui-testing-android.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/curso-ui-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/curso-ui-testing-ios.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/ddd-en-php.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/ddd-en-php.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/ddd-java.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/ddd-java.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/docker-desde-0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/docker-desde-0.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/domain-driven-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/domain-driven-design.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/dotfiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/dotfiles.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/elastic-stack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/elastic-stack.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/git-introduccion-trabajo-en-equipo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/git-introduccion-trabajo-en-equipo.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/github-actions-automatizacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/github-actions-automatizacion.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/github-actions-integracion-continua.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/github-actions-integracion-continua.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/go-primera-app.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/go-primera-app.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/intellij.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/intellij.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/iterm-productividad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/iterm-productividad.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/kubernetes-para-desarrolladores.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/kubernetes-para-desarrolladores.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/makefiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/makefiles.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/migracion-vuejs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/migracion-vuejs.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/notion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/notion.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/programacion-funcional-refactor-typeclasses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/programacion-funcional-refactor-typeclasses.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/prometheus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/prometheus.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/reactjs-de-0-a-deploy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/reactjs-de-0-a-deploy.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/solid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/solid.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/terminal-zsh.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/terminal-zsh.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/testing-introduccion-buenas-practicas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/testing-introduccion-buenas-practicas.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/testing-vuex.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/testing-vuex.jpg
--------------------------------------------------------------------------------
/61-mocking/public/cursos/vistas-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/cursos/vistas-android.jpg
--------------------------------------------------------------------------------
/61-mocking/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/61-mocking/public/favicon.ico
--------------------------------------------------------------------------------
/61-mocking/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
26 |
--------------------------------------------------------------------------------
/61-mocking/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/61-mocking/src/services/CoursesRepository.js:
--------------------------------------------------------------------------------
1 | import courses from "./courses.json";
2 |
3 | export default class CoursesRepository {
4 | searchAll() {
5 | return new Promise(resolve => {
6 | resolve(courses);
7 | });
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/61-mocking/src/services/timeService.js:
--------------------------------------------------------------------------------
1 | import dayjs from "dayjs";
2 | import relativeTime from "dayjs/plugin/relativeTime";
3 |
4 | dayjs.extend(relativeTime);
5 |
6 | export function getTimeAgo(time) {
7 | return dayjs(time).fromNow();
8 | }
9 |
--------------------------------------------------------------------------------
/61-mocking/src/views/HomeView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
--------------------------------------------------------------------------------
/62-mocking-fetch/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/62-mocking-fetch/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/*.test.js"],
3 | restoreMocks: true,
4 | };
5 |
--------------------------------------------------------------------------------
/62-mocking-fetch/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/favicon.ico
--------------------------------------------------------------------------------
/62-mocking-fetch/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/logo192.png
--------------------------------------------------------------------------------
/62-mocking-fetch/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/62-mocking-fetch/public/logo512.png
--------------------------------------------------------------------------------
/62-mocking-fetch/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/62-mocking-fetch/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/Home.js:
--------------------------------------------------------------------------------
1 | import Posts from "./components/PostsWithService";
2 |
3 | function Home() {
4 | return (
5 |
6 |
7 |
8 | );
9 | }
10 |
11 | export default Home;
12 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | text-align: center;
9 | }
10 |
11 | code {
12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
13 | monospace;
14 | }
15 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.css";
4 | import Home from "./Home";
5 | import reportWebVitals from "./reportWebVitals";
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById("root")
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/mocks/handlers.js:
--------------------------------------------------------------------------------
1 | import { rest } from "msw";
2 |
3 | export function getPosts(response = [], status = 200) {
4 | return rest.get(
5 | "https://jsonplaceholder.typicode.com/posts",
6 | (req, res, ctx) => {
7 | return res(ctx.status(status), ctx.json(response));
8 | }
9 | );
10 | }
11 |
12 | export function createPost(response = {}, status = 200) {
13 | return rest.post(
14 | "https://jsonplaceholder.typicode.com/posts",
15 | (req, res, ctx) => {
16 | return res(ctx.status(status), ctx.json(response));
17 | }
18 | );
19 | }
20 |
21 | export const handlers = [createPost(), getPosts()];
22 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/mocks/server.js:
--------------------------------------------------------------------------------
1 | import { setupServer } from "msw/node";
2 |
3 | import { handlers } from "./handlers";
4 |
5 | export const server = setupServer(...handlers);
6 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/services/postsRepository.js:
--------------------------------------------------------------------------------
1 | export function createPost(data) {
2 | return fetch("https://jsonplaceholder.typicode.com/posts", {
3 | method: "POST",
4 | body: JSON.stringify(data),
5 | headers: {
6 | "Content-type": "application/json; charset=UTF-8",
7 | },
8 | }).then((response) => response.json());
9 | }
10 |
11 | export function getAllPosts() {
12 | return fetch("https://jsonplaceholder.typicode.com/posts", {
13 | method: "GET",
14 | headers: {
15 | "Content-type": "application/json; charset=UTF-8",
16 | },
17 | }).then((response) => response.json());
18 | }
19 |
--------------------------------------------------------------------------------
/62-mocking-fetch/src/setupTests.js:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 | import { server } from "./mocks/server";
3 |
4 | beforeAll(() => server.listen());
5 |
6 | afterEach(() => server.resetHandlers());
7 |
8 | afterAll(() => server.close());
9 |
--------------------------------------------------------------------------------
/63-animations/css-transition/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/63-animations/css-transition/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/63-animations/css-transition/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all"
3 | }
4 |
--------------------------------------------------------------------------------
/63-animations/css-transition/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/63-animations/css-transition/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/63-animations/css-transition/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | };
8 |
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/bash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/bash.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/comunicacion-microservicios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/comunicacion-microservicios.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/css-layouts-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/css-layouts-bg.png
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/css-layouts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/css-layouts.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-agile-retrospectivas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-agile-retrospectivas.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-api-http-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-api-http-scala.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-app-mean-webpack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-app-mean-webpack.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-app-vuejs-jest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-app-vuejs-jest.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-arquitectura-hexagonal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-arquitectura-hexagonal.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-aws-ec2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-aws-ec2.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-aws-escalando-apps.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-aws-escalando-apps.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-cqrs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-cqrs.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-introduccion-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-introduccion-scala.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-screenshot-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-screenshot-testing-android.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-screenshot-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-screenshot-testing-ios.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-ui-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-ui-testing-android.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/curso-ui-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/curso-ui-testing-ios.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/ddd-en-php.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/ddd-en-php.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/ddd-java.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/ddd-java.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/docker-desde-0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/docker-desde-0.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/domain-driven-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/domain-driven-design.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/dotfiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/dotfiles.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/elastic-stack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/elastic-stack.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/git-introduccion-trabajo-en-equipo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/git-introduccion-trabajo-en-equipo.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/github-actions-automatizacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/github-actions-automatizacion.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/github-actions-integracion-continua.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/github-actions-integracion-continua.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/go-primera-app.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/go-primera-app.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/intellij.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/intellij.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/iterm-productividad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/iterm-productividad.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/kubernetes-para-desarrolladores.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/kubernetes-para-desarrolladores.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/makefiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/makefiles.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/migracion-vuejs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/migracion-vuejs.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/notion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/notion.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/programacion-funcional-refactor-typeclasses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/programacion-funcional-refactor-typeclasses.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/prometheus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/prometheus.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/reactjs-de-0-a-deploy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/reactjs-de-0-a-deploy.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/solid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/solid.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/terminal-zsh.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/terminal-zsh.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/testing-introduccion-buenas-practicas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/testing-introduccion-buenas-practicas.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/testing-vuex.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/testing-vuex.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/cursos/vistas-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/cursos/vistas-android.jpg
--------------------------------------------------------------------------------
/63-animations/css-transition/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/css-transition/public/favicon.ico
--------------------------------------------------------------------------------
/63-animations/css-transition/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
15 |
25 |
--------------------------------------------------------------------------------
/63-animations/css-transition/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/63-animations/time-scale/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/63-animations/time-scale/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/*.test.js"],
3 | };
4 |
--------------------------------------------------------------------------------
/63-animations/time-scale/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/favicon.ico
--------------------------------------------------------------------------------
/63-animations/time-scale/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/logo192.png
--------------------------------------------------------------------------------
/63-animations/time-scale/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/63-animations/time-scale/public/logo512.png
--------------------------------------------------------------------------------
/63-animations/time-scale/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/63-animations/time-scale/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/App.js:
--------------------------------------------------------------------------------
1 | import "./App.css";
2 | import Post from "./components/PostTransition";
3 |
4 | function App() {
5 | return (
6 |
7 |
8 |
9 | );
10 | }
11 |
12 | export default App;
13 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/components/styles.css:
--------------------------------------------------------------------------------
1 | .appear-enter {
2 | opacity: 0;
3 | transform: scale(0.9);
4 | }
5 | .appear-enter-active {
6 | opacity: 1;
7 | transform: translateX(0);
8 | transition: opacity 3000ms, transform 3000ms;
9 | }
10 | .appear-exit {
11 | opacity: 1;
12 | }
13 | .appear-exit-active {
14 | opacity: 0;
15 | transform: scale(0.9);
16 | transition: opacity 3000ms, transform 3000ms;
17 | }
18 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/63-animations/time-scale/src/setupTests.js:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 |
3 | process.env.TIME_SCALE_FACTOR = 0;
4 |
--------------------------------------------------------------------------------
/71-custom-renderers/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/71-custom-renderers/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/71-custom-renderers/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "none"
3 | }
4 |
--------------------------------------------------------------------------------
/71-custom-renderers/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/71-custom-renderers/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/71-custom-renderers/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest"
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | restoreMocks: true
8 | };
9 |
--------------------------------------------------------------------------------
/71-custom-renderers/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/71-custom-renderers/public/favicon.ico
--------------------------------------------------------------------------------
/71-custom-renderers/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
20 |
21 |
31 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/71-custom-renderers/src/assets/logo.png
--------------------------------------------------------------------------------
/71-custom-renderers/src/components/Header.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ $t("header.title") }}
4 |
5 |
6 |
7 |
8 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/i18n/en.js:
--------------------------------------------------------------------------------
1 | export default {
2 | header: {
3 | title: "Hello world"
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/i18n/es.js:
--------------------------------------------------------------------------------
1 | export default {
2 | header: {
3 | title: "Hola mundo"
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import { createStore } from "vuex";
3 | import { createI18n } from "vue-i18n";
4 |
5 | import App from "./App.vue";
6 | import { store } from "./store";
7 |
8 | import en from "./i18n/en";
9 | import es from "./i18n/es";
10 |
11 | createApp(App)
12 | .use(createStore(store))
13 | .use(
14 | createI18n({
15 | locale: "en",
16 | fallbackLocale: "en",
17 | messages: {
18 | en,
19 | es
20 | }
21 | })
22 | )
23 | .mount("#app");
24 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/services/commentsRepository.js:
--------------------------------------------------------------------------------
1 | export async function getAllComments() {
2 | return await [
3 | {
4 | user: {
5 | name: "Nicholas Cage",
6 | avatar: "https://www.placecage.com/120/120"
7 | },
8 | content: "Lorem ipsum dolor sit amet",
9 | date: "2021-01-31"
10 | }
11 | ];
12 | }
13 |
14 | export async function createComment(data) {
15 | return await {
16 | ...data,
17 | date: new Date().toISOString()
18 | };
19 | }
20 |
--------------------------------------------------------------------------------
/71-custom-renderers/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export async function login() {
2 | return await {
3 | name: "Bill Murray",
4 | avatar: "https://www.fillmurray.com/120/120",
5 | };
6 | }
7 |
--------------------------------------------------------------------------------
/72-test-object-factory/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/72-test-object-factory/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/72-test-object-factory/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "none"
3 | }
4 |
--------------------------------------------------------------------------------
/72-test-object-factory/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/72-test-object-factory/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/72-test-object-factory/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest"
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | restoreMocks: true
8 | };
9 |
--------------------------------------------------------------------------------
/72-test-object-factory/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/72-test-object-factory/public/favicon.ico
--------------------------------------------------------------------------------
/72-test-object-factory/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/72-test-object-factory/src/assets/logo.png
--------------------------------------------------------------------------------
/72-test-object-factory/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import { createStore } from "vuex";
3 |
4 | import App from "./App.vue";
5 | import { store } from "./store";
6 |
7 | createApp(App)
8 | .use(createStore(store))
9 | .mount("#app");
10 |
--------------------------------------------------------------------------------
/72-test-object-factory/src/services/commentsRepository.js:
--------------------------------------------------------------------------------
1 | export async function getAllComments() {
2 | return await [
3 | {
4 | user: {
5 | name: "Nicholas Cage",
6 | avatar: "https://www.placecage.com/120/120"
7 | },
8 | content: "Lorem ipsum dolor sit amet",
9 | date: "2021-01-31"
10 | }
11 | ];
12 | }
13 |
14 | export async function createComment(data) {
15 | return await {
16 | ...data,
17 | date: new Date().toISOString()
18 | };
19 | }
20 |
--------------------------------------------------------------------------------
/72-test-object-factory/src/services/userRepository.js:
--------------------------------------------------------------------------------
1 | export async function login() {
2 | return await {
3 | name: "Bill Murray",
4 | avatar: "https://www.fillmurray.com/120/120",
5 | };
6 | }
7 |
--------------------------------------------------------------------------------
/72-test-object-factory/src/test/factories/comment.js:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { date, lorem } from "faker";
3 | import { generateUser } from "./user";
4 |
5 | const factory = Factory.define(({ sequence }) => ({
6 | id: sequence,
7 | date: date.recent().toISOString(),
8 | content: lorem.paragraph(),
9 | user: generateUser()
10 | }));
11 |
12 | export function generateComment(params) {
13 | return factory.build(params);
14 | }
15 |
16 | export function generateCommentList(min = 0, max = 10) {
17 | const length = Math.random() * (max - min) + min;
18 | return factory.buildList(length);
19 | }
20 |
--------------------------------------------------------------------------------
/72-test-object-factory/src/test/factories/user.js:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { name, internet } from "faker";
3 |
4 | const factory = Factory.define(({ sequence }) => ({
5 | id: sequence,
6 | name: `${name.firstName()} ${name.lastName()}`,
7 | avatar: internet.avatar()
8 | }));
9 |
10 | export function generateUser(params) {
11 | return factory.build(params);
12 | }
13 |
--------------------------------------------------------------------------------
/72-test-object-factory/src/test/test-utils.js:
--------------------------------------------------------------------------------
1 | import { render as vtlRender } from "@testing-library/vue";
2 | import { store } from "../store";
3 |
4 | export * from "@testing-library/vue";
5 |
6 | export function render(component, { initialState } = {}) {
7 | return vtlRender(component, {
8 | store: {
9 | ...store,
10 | state: {
11 | ...store.state,
12 | ...initialState
13 | }
14 | }
15 | });
16 | }
17 |
--------------------------------------------------------------------------------
/73-snapshots/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is currently used by autoprefixer to adjust CSS to support the below specified browsers
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 | # For IE 9-11 support, please uncomment the last line of the file and adjust as needed
5 | > 0.5%
6 | last 2 versions
7 | Firefox ESR
8 | not dead
9 | # IE 9-11
--------------------------------------------------------------------------------
/73-snapshots/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/73-snapshots/.npmrc:
--------------------------------------------------------------------------------
1 | registry=http://registry.npmjs.org/
2 | package-lock=false
3 |
--------------------------------------------------------------------------------
/73-snapshots/README.md:
--------------------------------------------------------------------------------
1 | # Angular
2 |
3 | Configuration based on [Angular Testing Library examples](https://github.com/testing-library/angular-testing-library/)
4 |
5 | ## Run dev mode
6 |
7 | ```
8 | npm run start
9 | ```
10 |
11 | ## Run tests
12 |
13 | ```
14 | npm run test
15 | ```
16 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/app.component.css:
--------------------------------------------------------------------------------
1 | .container {
2 | display: flex;
3 | flex-direction: column;
4 | position: absolute;
5 | top: 0;
6 | bottom: 0;
7 | left: 0;
8 | right: 0;
9 | }
10 |
11 | .sidenav {
12 | flex: 1;
13 | }
14 |
15 | .sidenav-container {
16 | padding: 10px;
17 | }
18 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['app.component.css'],
7 | })
8 | export class AppComponent {
9 | }
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { BrowserModule } from '@angular/platform-browser';
2 | import { NgModule } from '@angular/core';
3 |
4 | import { CommentsComponent } from './components/comments.component'
5 | import { CommentComponent } from './components/comment.component'
6 |
7 | import { AppComponent } from './app.component';
8 |
9 | @NgModule({
10 | declarations: [
11 | AppComponent,
12 | CommentsComponent,
13 | CommentComponent,
14 | ],
15 | imports: [
16 | BrowserModule,
17 | ],
18 | bootstrap: [AppComponent],
19 | })
20 | export class AppModule {}
21 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/material.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 |
3 | import { MatInputModule } from '@angular/material/input';
4 | import { MatSelectModule } from '@angular/material/select';
5 |
6 | @NgModule({
7 | exports: [MatInputModule, MatSelectModule],
8 | })
9 | export class MaterialModule {}
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/models/comment.model.ts:
--------------------------------------------------------------------------------
1 | import { User } from './user.model'
2 |
3 | export interface Comment {
4 | id: number,
5 | content: string,
6 | date: string,
7 | user: User
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/models/user.model.ts:
--------------------------------------------------------------------------------
1 | export interface User {
2 | id: number,
3 | name: string,
4 | avatar: string
5 | }
6 |
7 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/test/factories/comment.ts:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { date, lorem } from "faker";
3 | import { Comment } from "../../models/comment.model"
4 | import user from "./user";
5 |
6 | export default Factory.define(({ sequence }) => ({
7 | id: sequence,
8 | date: date.recent().toISOString(),
9 | content: lorem.paragraph(),
10 | user: user.build()
11 | }));
12 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/app/test/factories/user.ts:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { name, internet } from "faker";
3 | import { User } from "../../models/user.model"
4 |
5 | export default Factory.define(({ sequence }) => ({
6 | id: sequence,
7 | name: `${name.firstName()} ${name.lastName()}`,
8 | avatar: internet.avatar()
9 | }));
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/73-snapshots/example-app/assets/.gitkeep
--------------------------------------------------------------------------------
/73-snapshots/example-app/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true,
3 | };
4 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/73-snapshots/example-app/favicon.ico
--------------------------------------------------------------------------------
/73-snapshots/example-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AngularTestingLibraryApp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | name: 'Example App',
3 | displayName: {
4 | name: 'Example',
5 | color: 'blue',
6 | },
7 | preset: '../jest.preset.js',
8 | };
9 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic()
12 | .bootstrapModule(AppModule)
13 | .catch((err) => console.log(err));
14 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/styles.css:
--------------------------------------------------------------------------------
1 | @import '@angular/material/prebuilt-themes/deeppurple-amber.css';
2 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/test-setup.ts:
--------------------------------------------------------------------------------
1 | import 'jest-preset-angular';
2 | import '@testing-library/jest-dom';
3 | import { configure } from '@testing-library/angular';
4 | import { ReactiveFormsModule } from '@angular/forms';
5 |
6 | configure({
7 | defaultImports: [ReactiveFormsModule],
8 | });
9 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "types": [],
6 | "allowJs": true
7 | },
8 | "files": ["main.ts", "polyfills.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "module": "commonjs",
5 | "types": ["node", "jest"]
6 | },
7 | "files": ["test-setup.ts"],
8 | "include": ["**/*.spec.ts", "**/*.d.ts"]
9 | }
10 |
--------------------------------------------------------------------------------
/73-snapshots/example-app/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../../tslint.json",
3 | "rules": {
4 | "directive-selector": [true, "attribute", "app", "camelCase"],
5 | "component-selector": [true, "element", "app", "kebab-case"]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/73-snapshots/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | projects: ['/'],
3 | };
4 |
--------------------------------------------------------------------------------
/73-snapshots/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | printWidth: 120,
3 | tabWidth: 2,
4 | useTabs: false,
5 | semi: true,
6 | singleQuote: true,
7 | trailingComma: 'all',
8 | bracketSpacing: true,
9 | };
10 |
--------------------------------------------------------------------------------
/73-snapshots/release.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | pkgRoot: 'dist/@testing-library/angular',
3 | branches: ['master', { name: 'beta', prerelease: true }],
4 | };
5 |
--------------------------------------------------------------------------------
/73-snapshots/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compileOnSave": false,
3 | "compilerOptions": {
4 | "baseUrl": "./",
5 | "importHelpers": true,
6 | "module": "esnext",
7 | "outDir": "./dist/out-tsc",
8 | "sourceMap": true,
9 | "declaration": false,
10 | "moduleResolution": "node",
11 | "emitDecoratorMetadata": true,
12 | "experimentalDecorators": true,
13 | "target": "es2015",
14 | "typeRoots": ["node_modules/@types"],
15 | "lib": ["es2017", "dom"]
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/82-TDD/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/82-TDD/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | node: true,
5 | },
6 | extends: [
7 | "plugin:vue/vue3-recommended",
8 | "eslint:recommended",
9 | "@vue/prettier",
10 | ],
11 | parserOptions: {
12 | parser: "babel-eslint",
13 | },
14 | rules: {
15 | "no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
16 | "no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
17 | },
18 | overrides: [
19 | {
20 | files: ["**/__tests__/*.{j,t}s?(x)", "**/test/**/*.spec.{j,t}s?(x)"],
21 | env: {
22 | jest: true,
23 | },
24 | },
25 | ],
26 | };
27 |
--------------------------------------------------------------------------------
/82-TDD/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/82-TDD/.prettierrc:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "all"
3 | }
4 |
--------------------------------------------------------------------------------
/82-TDD/README.md:
--------------------------------------------------------------------------------
1 | # vue
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/82-TDD/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/82-TDD/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | transform: {
4 | "^.+\\.vue$": "vue-jest",
5 | },
6 | testMatch: ["**/*.spec.js"],
7 | restoreMocks: true,
8 | };
9 |
--------------------------------------------------------------------------------
/82-TDD/public/cursos/bash.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/bash.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/buenas-practicas-bdd-cucumber-behat.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/comunicacion-microservicios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/comunicacion-microservicios.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/cqrs-event-sourcing-kotlin-axon-framework.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/css-layouts-bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/css-layouts-bg.png
--------------------------------------------------------------------------------
/82-TDD/public/cursos/css-layouts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/css-layouts.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-agile-retrospectivas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-agile-retrospectivas.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-api-http-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-api-http-scala.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-app-mean-webpack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-app-mean-webpack.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-app-vuejs-jest.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-app-vuejs-jest.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-arquitectura-hexagonal.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-arquitectura-hexagonal.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-aws-ec2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-aws-ec2.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-aws-escalando-apps.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-aws-escalando-apps.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-cqrs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-cqrs.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-introduccion-scala.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-introduccion-scala.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-screenshot-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-screenshot-testing-android.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-screenshot-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-screenshot-testing-ios.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-ui-testing-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-ui-testing-android.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/curso-ui-testing-ios.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/curso-ui-testing-ios.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/ddd-en-php.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/ddd-en-php.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/ddd-java.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/ddd-java.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/docker-desde-0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/docker-desde-0.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/domain-driven-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/domain-driven-design.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/dotfiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/dotfiles.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/elastic-stack.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/elastic-stack.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/git-introduccion-trabajo-en-equipo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/git-introduccion-trabajo-en-equipo.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/github-actions-automatizacion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/github-actions-automatizacion.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/github-actions-integracion-continua.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/github-actions-integracion-continua.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/go-primera-app.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/go-primera-app.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/intellij.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/intellij.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/iterm-productividad.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/iterm-productividad.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/kubernetes-para-desarrolladores.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/kubernetes-para-desarrolladores.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/makefiles.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/makefiles.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/migracion-vuejs.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/migracion-vuejs.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/notion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/notion.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/programacion-funcional-refactor-typeclasses.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/programacion-funcional-refactor-typeclasses.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/prometheus.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/prometheus.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/reactjs-de-0-a-deploy.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/reactjs-de-0-a-deploy.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/solid.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/solid.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/terminal-zsh.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/terminal-zsh.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/testing-introduccion-buenas-practicas.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/testing-introduccion-buenas-practicas.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/testing-vuex.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/testing-vuex.jpg
--------------------------------------------------------------------------------
/82-TDD/public/cursos/vistas-android.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/cursos/vistas-android.jpg
--------------------------------------------------------------------------------
/82-TDD/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/82-TDD/public/favicon.ico
--------------------------------------------------------------------------------
/82-TDD/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
15 |
16 |
25 |
--------------------------------------------------------------------------------
/82-TDD/src/main.js:
--------------------------------------------------------------------------------
1 | import { createApp } from "vue";
2 | import App from "./App.vue";
3 |
4 | createApp(App).mount("#app");
5 |
--------------------------------------------------------------------------------
/82-TDD/src/services/articlesRepository.js:
--------------------------------------------------------------------------------
1 | export async function getArticle(id) {
2 | return await fetch(
3 | `https://jsonplaceholder.typicode.com/posts/${id}/`,
4 | ).then(response => response.json());
5 | }
6 |
--------------------------------------------------------------------------------
/82-TDD/src/services/commentsRepository.js:
--------------------------------------------------------------------------------
1 | export async function getAllComments(articleId) {
2 | return await fetch(
3 | `https://jsonplaceholder.typicode.com/comments?postId=${articleId}`,
4 | )
5 | .then(response => response.json())
6 | .then(comments =>
7 | comments.map(comment => ({
8 | id: comment.id,
9 | title: comment.name,
10 | username: comment.email.split("@")[0],
11 | body: comment.body,
12 | })),
13 | );
14 | }
15 |
--------------------------------------------------------------------------------
/82-TDD/src/test/factories/article.js:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { lorem } from "faker";
3 |
4 | const factory = Factory.define(({ sequence }) => ({
5 | id: sequence,
6 | title: lorem.sentence(),
7 | body: lorem.paragraph(),
8 | }));
9 |
10 | export function generateArticle(params) {
11 | return factory.build(params);
12 | }
13 |
--------------------------------------------------------------------------------
/82-TDD/src/test/factories/comment.js:
--------------------------------------------------------------------------------
1 | import { Factory } from "fishery";
2 | import { internet, lorem } from "faker";
3 |
4 | const factory = Factory.define(({ sequence }) => ({
5 | id: sequence,
6 | username: internet.userName(),
7 | title: lorem.sentence(),
8 | body: lorem.paragraph(),
9 | }));
10 |
11 | export function generateComment(params) {
12 | return factory.build(params);
13 | }
14 |
15 | export function generateCommentList(min = 0, max = 10) {
16 | const length = Math.random() * (max - min) + min;
17 | return factory.buildList(length);
18 | }
19 |
--------------------------------------------------------------------------------
/82-TDD/src/views/ArticleView.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
--------------------------------------------------------------------------------
/91-ci/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/91-ci/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/*.test.js"],
3 | restoreMocks: true,
4 | };
5 |
--------------------------------------------------------------------------------
/91-ci/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/favicon.ico
--------------------------------------------------------------------------------
/91-ci/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/logo192.png
--------------------------------------------------------------------------------
/91-ci/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/91-ci/public/logo512.png
--------------------------------------------------------------------------------
/91-ci/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/91-ci/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/91-ci/src/Home.js:
--------------------------------------------------------------------------------
1 | import Posts from "./components/Posts";
2 |
3 | function Home() {
4 | return (
5 |
6 |
7 |
8 | );
9 | }
10 |
11 | export default Home;
12 |
--------------------------------------------------------------------------------
/91-ci/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | text-align: center;
9 | }
10 |
11 | code {
12 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
13 | monospace;
14 | }
15 |
--------------------------------------------------------------------------------
/91-ci/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom";
3 | import "./index.css";
4 | import Home from "./Home";
5 | import reportWebVitals from "./reportWebVitals";
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById("root")
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/91-ci/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/91-ci/src/services/postsRepository.js:
--------------------------------------------------------------------------------
1 | export function createPost(data) {
2 | return fetch("https://jsonplaceholder.typicode.com/posts", {
3 | method: "POST",
4 | body: JSON.stringify(data),
5 | headers: {
6 | "Content-type": "application/json; charset=UTF-8",
7 | },
8 | }).then((response) => response.json());
9 | }
10 |
11 | export function getAllPosts() {
12 | return fetch("https://jsonplaceholder.typicode.com/posts", {
13 | method: "GET",
14 | headers: {
15 | "Content-type": "application/json; charset=UTF-8",
16 | },
17 | }).then((response) => response.json());
18 | }
19 |
--------------------------------------------------------------------------------
/91-ci/src/setupTests.js:
--------------------------------------------------------------------------------
1 | import "@testing-library/jest-dom";
2 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Dependency directories
9 | node_modules/
10 |
11 | # Optional npm cache directory
12 | .npm
13 |
14 | # Optional eslint cache
15 | .eslintcache
16 |
17 | # Output of 'npm pack'
18 | *.tgz
19 |
20 | # Yarn Integrity file
21 | .yarn-integrity
22 |
23 | # dotenv environment variables file
24 | .env
25 | .env.test
26 |
27 | # Build output
28 | dist
29 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/.prettierrc:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/Q&A/vanilla-js/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "useBuiltIns": "usage",
7 | "corejs": "3.9.1"
8 | }
9 | ]
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "baseUrl": "http://localhost:8080",
3 | "video": false
4 | }
5 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 | Hello world!
12 |
13 | Current users
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | testMatch: ["**/tests/*.(spec|test).js"],
3 | transform: {
4 | "\\.[jt]sx?$": "babel-jest",
5 | },
6 | moduleNameMapper: {
7 | "\\.(css|less)$": "identity-obj-proxy",
8 | },
9 | };
10 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/src/assets/images/logo-codelytv-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vanilla-js/src/assets/images/logo-codelytv-light.png
--------------------------------------------------------------------------------
/Q&A/vanilla-js/src/index.js:
--------------------------------------------------------------------------------
1 | import "./assets/css/normalize.css";
2 |
3 | import { getUsers } from "./users";
4 |
5 | export async function printUsers() {
6 | const users = await getUsers();
7 | const element = document.getElementById("users");
8 | element.innerHTML = users.map((user) => `${user.name}
`).join("");
9 | }
10 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/src/users.js:
--------------------------------------------------------------------------------
1 | export async function getUsers() {
2 | return await [{ name: "Javi" }, { name: "Núria" }];
3 | }
4 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/tests/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "plugins": ["jest"],
3 | "env": {
4 | "jest/globals": true
5 | }
6 | }
--------------------------------------------------------------------------------
/Q&A/vanilla-js/webpack.dev.js:
--------------------------------------------------------------------------------
1 | const { merge } = require("webpack-merge");
2 |
3 | const common = require("./webpack.common.js");
4 |
5 | module.exports = merge(common, {
6 | mode: "development",
7 | devtool: "inline-source-map",
8 | target: "web",
9 | devServer: {
10 | contentBase: "./dist",
11 | },
12 | });
13 |
--------------------------------------------------------------------------------
/Q&A/vanilla-js/webpack.prod.js:
--------------------------------------------------------------------------------
1 | const { merge } = require("webpack-merge");
2 | const MiniCssExtractPlugin = require("mini-css-extract-plugin");
3 |
4 | const common = require("./webpack.common.js");
5 |
6 | module.exports = merge(common, {
7 | mode: "production",
8 | devtool: "source-map",
9 | plugins: [new MiniCssExtractPlugin()],
10 | module: {
11 | rules: [
12 | {
13 | test: /\.css$/i,
14 | use: [MiniCssExtractPlugin.loader, "css-loader"],
15 | },
16 | ],
17 | },
18 | });
19 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/.browserslistrc:
--------------------------------------------------------------------------------
1 | > 1%
2 | last 2 versions
3 | not dead
4 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/README.md:
--------------------------------------------------------------------------------
1 | # vuetify-example
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Run your unit tests
19 | ```
20 | npm run test:unit
21 | ```
22 |
23 | ### Lints and fixes files
24 | ```
25 | npm run lint
26 | ```
27 |
28 | ### Customize configuration
29 | See [Configuration Reference](https://cli.vuejs.org/config/).
30 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"],
3 | };
4 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/jest.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | preset: "@vue/cli-plugin-unit-jest",
3 | };
4 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vuetify-example/public/favicon.ico
--------------------------------------------------------------------------------
/Q&A/vuetify-example/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
19 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CodelyTV/javascript-testing-frontend-course/20d15d2d46dc236a54689cb1d7e8fb084b4998ac/Q&A/vuetify-example/src/assets/logo.png
--------------------------------------------------------------------------------
/Q&A/vuetify-example/src/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import App from "./App.vue";
3 | import vuetify from "./plugins/vuetify";
4 |
5 | Vue.config.productionTip = false;
6 |
7 | new Vue({
8 | vuetify,
9 | render: (h) => h(App),
10 | }).$mount("#app");
11 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/src/plugins/vuetify.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import Vuetify from "vuetify/lib/framework";
3 |
4 | Vue.use(Vuetify);
5 |
6 | export default new Vuetify({});
7 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/tests/unit/test-utils.js:
--------------------------------------------------------------------------------
1 | import { render as vtlRender } from "@testing-library/vue";
2 | import Vue from "vue";
3 | import Vuetify from "vuetify";
4 |
5 | export * from "@testing-library/vue";
6 |
7 | Vue.use(Vuetify);
8 |
9 | export function render(component, options, cb) {
10 | const root = document.createElement("div");
11 | root.setAttribute("data-app", "true");
12 |
13 | return vtlRender(
14 | component,
15 | {
16 | container: document.body.appendChild(root),
17 | vuetify: new Vuetify(),
18 | ...options,
19 | },
20 | cb
21 | );
22 | }
23 |
--------------------------------------------------------------------------------
/Q&A/vuetify-example/vue.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | transpileDependencies: ["vuetify"],
3 | };
4 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Frontend testing with Testing Library
2 |
--------------------------------------------------------------------------------