Cypress Installation Process | Why should you Switch to Cypress Testing Framework?

May 27, 2020 11:51:25 PM | by Srashti Tudha

 

Cypress Testing

Cypress testing framework can be called a next-generation front end tool for testing built for the modern web.

Testing is one of the critical processes in application development. The success or failure of the application entirely depends on it. However, website testing is totally different from conventional software testing.

End-to-end testing comes to the rescue, as it allows the programmer to replicate the behaviour of the user on their app and validate that all the things work as they should. This article will briefly talk about the Cypress testing framework in detail, including the advantages and benefits of Cypress testing, how it is different, and how to install it.

Cypress could be used for:

  • Unit Testing
  • Integration Testing
  • End-to-End Testing

What is Cypress Testing?

Cypress can be understood as an end-to-end testing framework based on JavaScript, which comes with various inbuilt features. You will need these features in any automation tool. Cypress tests are written in JavaScript but let that not scare you, in case you are unfamiliar with JavaScript, the majority of the time you would be working with cypress commands which are pretty intuitive to work with. Cypress utilizes the Mocha testing framework as well as the chai assertion library in the framework.

Cypress, primarily, is not built over selenium and is a new driver which operates within your app and this lets you exercise very good control over the backend and frontend of your app. Cypress enables a programmer to write every type of tests like unit tests, integration tests, and end-to-end tests. It can also test anything which runs in a browser.

What is End to End Testing

End to End Testing, or UI testing is one of the many approaches for testing a web application. An end to end test is supposed to check whether a web application works as expected or not, by testing the so-called user flow.

What Makes Cypress Different?

  • Architecture - Most testing tools operate by running outside of the browser and executing remote commands across the network. Cypress is the exact opposite. Cypress is executed in the same run loop as your application.
  • Works on Network Layer - Cypress also operates at the network layer by reading and altering web traffic on the fly. This enables Cypress to not only modify everything coming in and out of the browser but also to change the code that may interfere with its ability to automate the browser. Cypress ultimately controls the entire automation process from top to bottom.
  • A New Kind of Testing - Having ultimate control over your application, the network traffic, and native access to every host object unlocks a new way of testing that has never been possible before. Instead of being "locked out" of your application and not being able to easily control it, Cypress instead lets you alter any aspect of how your application works.
  • Shortcuts - Cypress saves you from being forced to act like a user always to generate the status of a particular situation. This means you are not required to visit the login page, type in your password and username, and wait for the web page to redirect or login for each test you run. Through Cypress, you have the ability to take shortcuts as well as programmatically log in.

Advantages of Cypress Testing

Cypress has many advantages, I am highlighting only those that I found interesting:

  1. Real-Time Reloads - Cypress is intelligent enough to know that after saving your test file (xyz_spec.js file), you are going to run it again, so it automatically triggers the run next to your browser as soon as you press to save your file. Hence, there is no need to manually trigger the run. 
  2. Debuggability - Cypress gives you the ability to directly debug your app under test from chrome Dev-tools, It not only gives you straightforward error messages but also suggests to you how you should approach them.
  3. Automatic waiting - Cypress automatically waits for the DOM to load, elements to become visible, the animation to be completed, the XHR and AJAX calls to be finished, and much more. Hence, there is no need to define implicit and explicit waits.
  4. Cypress also offers an amazing dashboard, which gives you insights and a summary of tests executed across the CI/CD tools. This dashboard is similar to other dashboards provided by CI/CD tools that give you execution details and logs of your tests.
  5. Another advantage provided by Cypress if the GUI tool to execute/view your tests view the configuration, and view tests executed from dashboards. You can also watch your tests running as well as get more insights into the test run.

Beneficial Points of Cypress Testing

  1. It is fast and takes only less than 20 ms response time.
  2. It helps you find a locator.
  3. It has an active community on Gitter, StackOverflow, and GitHub.
  4. It has the ability to either stub responses or let them hit your server.
  5. It is open-source and free
  6. It provides rich documentation

How to Install Cypress?

The process of installing Cypress is an easy task. The only thing you require is node.js installed in the machine and then two npm commands – npm init, npm install cypress –save-dev.

The first command will form a package.json and the second one will install Cypress as the devDependencies array in the package descriptor (package.json) file. It would take almost three minutes to install Cypress based on the speed of your network.

Now, Cypress has been installed to ./node_modules directory. After you have completed the installation part, you will have to open Cypress for the very first time by running this command at the same location where you have the package.json file – ./node_modules/.bin/cypress open

Cypress has its own folder structure, which gets generated automatically when you open it for the very first time at that specific location. It comes with ready-made recipes that depict how to test common scenes in Cypress.

How do you write a Cypress test?

Writing a Cypress test might require some brushing up for the beginners. So, if you have the app installed on your device, here are the three tests you can do to initiate your hand into Cypress testing.

  1. Writing a Passing Test

Add the following code to any IDE file you would like to run the test on.

describe(‘My First Test’, function() {

it(‘Does not do much!’, function() {

expect(true).to.equal(true)

})

})

Save the file and reload it upon the browser.

There will be no significant changes in the application but this is the first passing test that you have performed using Cypress.

  1. Writing a Failing Test

Here is the code for writing your first failing test.

describe(‘My First Test’, function() {

it(‘Does not do much!’, function() {

expect(true).to.equal(false)

})

})

Now, save the file and try reloading it. The result will be a failed test because True and False are two different values.

The Test Runner screen will show you the assertions and more activity. The comments, page events, requests, and other essentials will be displayed upon the same screen later.

  1. Writing a Real Test

The three phases you will have to go through to run a successful test in real-time are:

  1. Set up the application state in your device.
  2. Prompt an action.
  3. Assert the resulting application state after the action has been taken.

The application is made to run through the above phases so that you can see where you are going with the project.

Now, let us take a closer look at how you can set up a Cypress testing code in the above three phases and deliver a perfect application.

Step 1. Visit the Web Page

Use any application you want to run the test upon. Here, we shall use the Kitchen Sink app. Use cy.visit() command to visit the URL of the website. Use the following code.

describe(‘My First Test’, function() {

it(‘Visits the Kitchen Sink’, function() {

cy.visit(‘https://example.cypress.io’)

})

})

Once you save the file and reload, you will be able to see the VISIT action on the Command Log. The app preview pane will show the Kitchen Sink application with a green test.

Had the test failed, you would have received an error.

Step 2. Performing Action

Now that we have our URL loaded, we need to give it a task to perform so that we can see changes.

describe(‘My First Test’, function() {

it(‘finds the content “type”‘, function() {

cy.visit(‘https://example.cypress.io’)

cy.contains(‘type’)

})

})

The above code uses cy.contains() function to find an element (type) in the web page.

Now, if your page has the element, it will show a green sign in the Command Log. Otherwise, your action will fail and go red in about 4 seconds.

Step 3. Click and Visit

Since you have highlighted an element on the web page, we should hyperlink it too. Therefore, you can use the .click() command to end the previous one.

describe(‘My First Test’, function() {

it(‘clicks the link “type”‘, function() {

cy.visit(‘https://example.cypress.io’)

cy.contains(‘type’).click()

})

})

Now, when you save and reload the app, you will be able to click on “type” to visit a new page.

  1. Assertion

Did you know that by using the .should() function you can make your action work only on certain conditions which should be adhered to. If not, the result is a failed command.

describe(‘My First Test’, () => {

it(‘clicking “type” navigates to a new url’, () => {

cy.visit(‘https://example.cypress.io’)

cy.contains(‘type’).click()

// Should be on a new URL which includes ‘/commands/actions’

cy.url().should(‘include’, ‘/commands/actions’)

})

})

Apart from the above functions and commands, there are some others you can perform to make your web page more engaging and interactive. You can also become well-versed with the more complex commands by practicing testing with Cypress.

Bottom Line

Cypress is a powerful tool that makes it easy to set up, write, run, and debug tests. I hope this post showed you how easy it is to incorporate Cypress into your development workflow. End to end testing might be hard but cypress makes it pleasing and enjoyable.

 

 

Tags: software testing, cypress, installation testing

Srashti Tudha

Written by Srashti Tudha

    Subscribe to Email Updates

    Lists by Topic

    see all

    Posts by Topic

    See all

    Recent Posts