From 74ff478f9370170e1b127d078c735c90daf3bfad Mon Sep 17 00:00:00 2001 From: Marina Monsivais Date: Thu, 15 Apr 2021 22:07:54 -0500 Subject: [PATCH 1/2] Added render to each test --- README.md | 47 ++++++++------- package-lock.json | 94 ++++++++++++++---------------- src/components/ContactForm.test.js | 35 +++++++---- 3 files changed, 95 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 16ae2fdc..ed638ef9 100644 --- a/README.md +++ b/README.md @@ -19,37 +19,42 @@ As a developer, you will be writing tests for every component. As we've learned, ![Contact Example](project-goals.gif) -***Make sure to complete your tasks one at a time and complete test each task before proceding forward.*** +**_Make sure to complete your tasks one at a time and complete test each task before proceding forward._** ## Instructions + ### Task 1: Project Set Up -* [ ] Create a forked copy of this project. -* [ ] Clone your OWN version of the repository in your terminal -* [ ] cd into the project base directory `cd web-module-project-reducer-pattern` -* [ ] Download project dependencies by running `npm install` -* [ ] Start up the app using `npm start` -- [ ] In a new terminal window, run `npm test` -- [ ] With each saved change in your editor, the test runner will re-run all the tests -- [ ] **IMPORTANT** If a test fails, use the test runner's error messages to find out why it is failing + +- [x] Create a forked copy of this project. +- [x] Clone your OWN version of the repository in your terminal +- [x] cd into the project base directory `cd web-module-project-testing-web-apps` +- [x] Download project dependencies by running `npm install` +- [x] Start up the app using `npm start` + +* [x] In a new terminal window, run `npm test` +* [ ] With each saved change in your editor, the test runner will re-run all the tests +* [ ] **IMPORTANT** If a test fails, use the test runner's error messages to find out why it is failing ### Task 2: Project Requirements -> *All of the work you will do today will be contained inside the ContactForm.test.js file. You will be tasked to write the code for at least 9 different tests on various parts of the ContactForm component. Please read the instructions for each test carefully.* + +> _All of the work you will do today will be contained inside the ContactForm.test.js file. You will be tasked to write the code for at least 9 different tests on various parts of the ContactForm component. Please read the instructions for each test carefully._ #### Test Brainstorming -* [ ] Run and play around with the form interface. -* [ ] Write out a list of possible testcases for this application within Understanding-questions.md. + +- [x] Run and play around with the form interface. +- [ ] Write out a list of possible testcases for this application within Understanding-questions.md. #### Complete a case that tests if: -* [ ] the component renders the contact form component without errors. -* [ ] the header h1 element exists. Include three asserts, if the header is in the document, if the heads is truthy, if the header has the correct test content. -* [ ] the component renders ONE error message if the user enters less than 4 characters into the firstname field. Make sure to use async / await and the correct screen method to account for state change. -* [ ] the component renders THREE error messages if the user submits without filling in any values. -* [ ] the component renders ONE error message if the user submits without filling in the email field. -* [ ] the component renders the text *"email must be a valid email address"* if an invalid email address is typed into the email field. -* [ ] the component renders the text *"lastName is a required field"* the form is submitted without a last name. -* [ ] the component renders the firstname, lastname and email text when submitted with valued fields and does **not** render a message value when one is not entered into the message field. -* [ ] renders all fields when the user submits with valid text filled in for all fields. +- [x] the component renders the contact form component without errors. +- [ ] the header h1 element exists. Include three asserts, if the header is in the document, if the heads is truthy, if the header has the correct test content. +- [ ] the component renders ONE error message if the user enters less than 4 characters into the firstname field. Make sure to use async / await and the correct screen method to account for state change. +- [ ] the component renders THREE error messages if the user submits without filling in any values. +- [ ] the component renders ONE error message if the user submits without filling in the email field. +- [ ] the component renders the text _"email must be a valid email address"_ if an invalid email address is typed into the email field. +- [ ] the component renders the text _"lastName is a required field"_ the form is submitted without a last name. +- [ ] the component renders the firstname, lastname and email text when submitted with valued fields and does **not** render a message value when one is not entered into the message field. +- [ ] renders all fields when the user submits with valid text filled in for all fields. ## Stretch goals diff --git a/package-lock.json b/package-lock.json index 5f776bd0..defe5f0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4944,23 +4944,23 @@ "integrity": "sha512-YW8rXMJx33FalISp0uP0+AkvBx9gfzzQ4NotblGga6Z8ZX00bg2e5FNWV8fyDD/VN3WLhEtjFXNwzdJrdaAHEQ==" }, "elliptic": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz", - "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -5583,9 +5583,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" }, "events": { "version": "3.1.0", @@ -6211,22 +6211,9 @@ } }, "follow-redirects": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", - "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", - "requires": { - "debug": "^3.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - } - } + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" }, "for-in": { "version": "1.0.2", @@ -6891,9 +6878,9 @@ "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=" }, "http-proxy": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz", - "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -7039,9 +7026,9 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "inquirer": { "version": "7.1.0", @@ -9441,9 +9428,9 @@ } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._reinterpolate": { "version": "3.0.0", @@ -9989,9 +9976,9 @@ } }, "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" }, "node-int64": { "version": "0.4.0", @@ -13055,11 +13042,11 @@ "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" }, "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "requires": { - "node-forge": "0.9.0" + "node-forge": "^0.10.0" } }, "semver": { @@ -15279,6 +15266,13 @@ "which-module": "^2.0.0", "y18n": "^3.2.1 || ^4.0.0", "yargs-parser": "^11.1.1" + }, + "dependencies": { + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + } } }, "yargs-parser": { @@ -15679,9 +15673,9 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" }, "yallist": { "version": "4.0.0", diff --git a/src/components/ContactForm.test.js b/src/components/ContactForm.test.js index 5f80a897..e8f5b1cc 100644 --- a/src/components/ContactForm.test.js +++ b/src/components/ContactForm.test.js @@ -1,41 +1,56 @@ import React from 'react'; -import {render, screen, waitFor } from '@testing-library/react'; +import {getByLabelText, render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import ContactForm from './ContactForm'; -test('renders without errors', ()=>{ - +test('renders without errors', ()=> { + render(); }); test('renders the contact form header', ()=> { - + //arrange + render(); +// screen.debug() + //act + const header = screen.getByText(/contact form/i); + //assert + expect(header).toBeVisible(); }); test('renders ONE error message if user enters less then 5 characters into firstname.', async () => { + render(); + + const firstNameInput = screen.getByLabelText(/first name/i) + + // console.log(firstnameInput); + userEvent.type(firstNameInput, "Mina") + // screen.debug() + expect(screen.getAllByTestId('error')).toHaveLength(1) }); test('renders THREE error messages if user enters no values into any fields.', async () => { - + render(); + }); test('renders ONE error message if user enters a valid first name and last name but no email.', async () => { - + render(); }); test('renders "email must be a valid email address" if an invalid email is entered', async () => { - + render(); }); test('renders "lastName is a required field" if an last name is not entered and the submit button is clicked', async () => { - + render(); }); test('renders all firstName, lastName and email text when submitted. Does NOT render message if message is not submitted.', async () => { - + render(); }); test('renders all fields text when all fields are submitted.', async () => { - + render(); }); \ No newline at end of file From c0b76bed1cd427a5d85ba4edca5a0ad3e86d1e33 Mon Sep 17 00:00:00 2001 From: Marina Monsivais Date: Thu, 15 Apr 2021 22:18:07 -0500 Subject: [PATCH 2/2] Completed 3 tests --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ed638ef9..23911314 100644 --- a/README.md +++ b/README.md @@ -47,8 +47,8 @@ As a developer, you will be writing tests for every component. As we've learned, #### Complete a case that tests if: - [x] the component renders the contact form component without errors. -- [ ] the header h1 element exists. Include three asserts, if the header is in the document, if the heads is truthy, if the header has the correct test content. -- [ ] the component renders ONE error message if the user enters less than 4 characters into the firstname field. Make sure to use async / await and the correct screen method to account for state change. +- [x] the header h1 element exists. Include three asserts, if the header is in the document, if the heads is truthy, if the header has the correct test content. +- [x] the component renders ONE error message if the user enters less than 4 characters into the firstname field. Make sure to use async / await and the correct screen method to account for state change. - [ ] the component renders THREE error messages if the user submits without filling in any values. - [ ] the component renders ONE error message if the user submits without filling in the email field. - [ ] the component renders the text _"email must be a valid email address"_ if an invalid email address is typed into the email field.