diff --git a/README.md b/README.md index b7f3b777c5..b297a7cd2c 100644 --- a/README.md +++ b/README.md @@ -35,18 +35,21 @@ Commit your code regularly and meaningfully. This helps both you (in case you ev Demonstrate your understanding of this week's concepts by answering the following free-form questions. Edit this document to include your answers after each question. 1. In 1-2 sentences, explain what React's `useRouteMatch` hook is used for. +- useRouteMatch allows you to access the match object. If it is provided with no arguments, it returns the closest match in the component or its parents. 1. How would you explain form validation to someone who has never programmed before? +- Form validation is the web-form checks if the info provided by the user is correct and has an expected type of input. 1. In 1-2 sentences, define end to end testing. +- It imitates a users that would use the application. It tests and helps figure out whether or not the results is what is expected by the developer. ## Instructions ### Task 1: Project Set Up -- [ ] Create a forked copy of this project -- [ ] Clone your OWN version of the repository (Not Lambda's by mistake!) -- [ ] Implement the project on the main branch, committing changes regularly -- [ ] Push commits: `git push origin main` -- [ ] PUSH EVERYTHING TO THE MAIN BRANCH +- [X] Create a forked copy of this project +- [X] Clone your OWN version of the repository (Not Lambda's by mistake!) +- [X] Implement the project on the main branch, committing changes regularly +- [X] Push commits: `git push origin main` +- [X] PUSH EVERYTHING TO THE MAIN BRANCH ### Task 2: Project Requirements diff --git a/cypress.json b/cypress.json new file mode 100644 index 0000000000..e1c63e05f8 --- /dev/null +++ b/cypress.json @@ -0,0 +1,5 @@ +{ + "viewportWidth":500, + "viewportHeight": 500 +} + diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 0000000000..02e4254378 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/integration/1-getting-started/todo.spec.js b/cypress/integration/1-getting-started/todo.spec.js new file mode 100644 index 0000000000..4768ff923e --- /dev/null +++ b/cypress/integration/1-getting-started/todo.spec.js @@ -0,0 +1,143 @@ +/// + +// Welcome to Cypress! +// +// This spec file contains a variety of sample tests +// for a todo list app that are designed to demonstrate +// the power of writing tests in Cypress. +// +// To learn more about how Cypress works and +// what makes it such an awesome testing tool, +// please read our getting started guide: +// https://on.cypress.io/introduction-to-cypress + +describe('example to-do app', () => { + beforeEach(() => { + // Cypress starts out with a blank slate for each test + // so we must tell it to visit our website with the `cy.visit()` command. + // Since we want to visit the same URL at the start of all our tests, + // we include it in our beforeEach function so that it runs before each test + cy.visit('https://example.cypress.io/todo') + }) + + it('displays two todo items by default', () => { + // We use the `cy.get()` command to get all elements that match the selector. + // Then, we use `should` to assert that there are two matched items, + // which are the two default items. + cy.get('.todo-list li').should('have.length', 2) + + // We can go even further and check that the default todos each contain + // the correct text. We use the `first` and `last` functions + // to get just the first and last matched elements individually, + // and then perform an assertion with `should`. + cy.get('.todo-list li').first().should('have.text', 'Pay electric bill') + cy.get('.todo-list li').last().should('have.text', 'Walk the dog') + }) + + it('can add new todo items', () => { + // We'll store our item text in a variable so we can reuse it + const newItem = 'Feed the cat' + + // Let's get the input element and use the `type` command to + // input our new list item. After typing the content of our item, + // we need to type the enter key as well in order to submit the input. + // This input has a data-test attribute so we'll use that to select the + // element in accordance with best practices: + // https://on.cypress.io/selecting-elements + cy.get('[data-test=new-todo]').type(`${newItem}{enter}`) + + // Now that we've typed our new item, let's check that it actually was added to the list. + // Since it's the newest item, it should exist as the last element in the list. + // In addition, with the two default items, we should have a total of 3 elements in the list. + // Since assertions yield the element that was asserted on, + // we can chain both of these assertions together into a single statement. + cy.get('.todo-list li') + .should('have.length', 3) + .last() + .should('have.text', newItem) + }) + + it('can check off an item as completed', () => { + // In addition to using the `get` command to get an element by selector, + // we can also use the `contains` command to get an element by its contents. + // However, this will yield the