this site demands javascript

Cypress: How to Avoid Bad Practices, Code Smells, and Pitfalls?

Cypress is the tool of the future for front-end web application testing.

Its goal is to help engineers and developers overcome their challenges while testing React and AngularJS-based web apps.




It’s a simple, painless, and trustworthy way to test any browser-based application.

Cypress helps its customers from the test development phase with its test execution capability, complementing the popular Selenium WebDriver framework, which has many language bindings and is based on grid architecture.


Benefits of Cypress

Cypress may be used for a wide range of development tasks since it provides a platform that allows for quick debugging and simple code maintenance.

Cypress has several distinguishing characteristics.

  • Cypress allows you to take snapshots while the program is running. Each occurrence in a test step is described by hovering over instructions in the Command Log.
  • Cypress guarantees that synchronization methods such as sleep and wait are not required in our test scenarios. It waits for the following actions or verifications by default before proceeding to the next stage.
  • By default, Cypress may record screenshots in the event of a failure. While operating from the command line interface can also record the entire test suite execution videos.
  • Cross-browser testing is possible with Cypress. It works with Firefox (currently under development), Chrome, and Opera (Electron and Edge).
  • Cypress may interface with Continuous Integration technologies to initiate the execution in different parameters.
  • It examines the features of functions, timers, and server replies. From the standpoint of unit testing, this is crucial.
  • Cypress offers excellent documentation that assists us in developing our end-to-end test cases.
  • From the Developer Tools, Cypress makes debugging simple. Debugging is quick and straightforward, thanks to the errors and stack trace.
  • The cause for our script’s failure is described in detail by Cypress’s error logging message.
  • Cypress provides a straightforward and appealing API that requires no initial setup.
  • Cypress offers the ability to evaluate edge test cases by simulating server response times.
  • Cypress provides speedy, consistent, and reliable test execution results in other automation tools due to its architectural design.
  • Cypress uses viewport sizing to test a web page’s responsiveness.
  • Cypress provides a test status option that shows the number of test cases that have succeeded or failed.
  • By default, Cypress reloads all changes made in the tests.


Good Practices to Adopt While Using Cypress

Following is a set of good practices that one must follow to make the most out of Cypress:


Organizing the tests: the documentation for “Writing and Organizing Tests” explains the fundamentals of how to structure your tests.

Pages and components should manage difficulties since you should test each component separately if feasible.


Choosing Components: use cy. contains() with regex for a precise match and avoids capitalization in CSS since it makes writing tests more complex.

You may utilize data-cy selectors if you have text you want to modify but don’t want to disrupt the cypress test, but this shouldn’t be your first choice!


Excessive Waiting: don’t use the word “wait” (). If an assertion fails, Cypress will attempt the previous command, which will continue until the global timeout is reached.

If you need to wait for an operation, you may use assertions like cy.contains(‘Successfully uploaded’) to wait for an element not to exist. 

See also  Security Accelerating Password Manager Market


Commands of Cypress: you may reuse old ones instead of writing new Cypress commands.

Instead of creating additional Commands, we chose to utilize ES6 classes with static methods in this project.

Later on, while introducing Typescript support, this worked better.


Permissions For Users: instead of logging in as a superuser with all access, try logging in as various users with varied permissions.


Data in Control: as much as feasible, use mock or control test data.

This ensures that tests don’t flake and are readily repeatable locally.

Some tests even go to filter tables for a unique name that is only used once.


Code Smells

Code smells aren’t the same as bugs or mistakes.

Instead, they are flagrant breaches of software development concepts that degrade code quality.

With the C programming language on every system in the mid-1980s, programming progressively crept into the scene of technological advancement.

Then, coding was seen as a job of producing outputs, regardless of the code or method used. But, since then, we’ve gone a long way.

Coding is about optimizing your whole software to run better, last longer, and be more visible.

Code smells do not necessarily indicate that the software will not function.

It may still provide an output; nonetheless, they may slow down processing, raise the likelihood of failure and errors, and make the program more prone to faults in the future.

Smelly code leads to poor code quality and, as a result, increases technical debt.

Code smells signal a more serious issue, although they are detectable or detectable quickly, as the term implies.

The best smell is simple to locate yet leads to an intriguing difficulty, such as classes with data but no behavior.

With the use of tools, code smells may be readily discovered.


How to Remove Code-Smells?

The code review process starts after all sorts of smells have been identified.

To manually discover such smells, two or more developers might employ the primary approach, the ad-hoc code review process.

Many smells are impossible to detect via human inspection. Hence automated code review methods are utilized to see them.

Code smells are injected into the source code, consciously or inadvertently, and may even arise when fixing other smells.

Developers purposefully discard most smells because they seem to have a little influence or are too difficult to explain.

Refactoring is the next step for engineers when they come across stinky code.

Refactoring is the process of modifying a software system to improve its internal structure while maintaining its outward behavior.

It may be the most crucial technical aspect in obtaining agility.

The objective is to keep within acceptable operating limitations while causing as little damage as possible.

Because expenses do not connect linearly to the amount of repair required, remaining below these boundaries keeps costs low.

Refactoring is a technique in which the code is broken down into smaller chunks based on the smells found.

The choice is then made to either eliminate them or replace them with a better set of code that will improve code quality while also improving nonfunctional attributes such as simplicity, flexibility, understandability, and performance.

Run tests after refactoring to confirm that everything is still working correctly.

This technique may need to be repeated until the smell is gone.


Pitfalls to Consider Before Adopting Cypress

There is a number of issues you want to take into consideration before adopting Cypress.

See also  Download Xender for PC: Easy Methods to Get the Versatile App on Your PC


Being an Experienced Programmer for Cypress

You must be an experienced programmer.

Cypress is the best Selenium substitute for front-end developers.

Selenium is sluggish, and its technology is outdated, but Cypress is quick and cutting-edge. Furthermore, Cypress tests are written in JavaScript, a popular front-end programming language.

The framework’s authors did build it with front-end developers as their primary target audience.

What does this imply? To even get started with your project, much alone gain the full advantages of Cypress, you’ll need to be a competent JavaScript developer.

I’ve seen non-technical testers struggle with Cypress evaluation.

They couldn’t get their first experimental test to compile, despite the fact that it had just expected (true).to.equal (true).



Test execution cannot be parallelized.

If the parallelizing test runs to speed up test automation is a must-have for your work, look into Selenium, Protractor, or other test automation solutions that offer test execution parallelization.


Chrome Forever

You can’t use any other browser than Chrome.

Other browsers, such as Firefox, Safari, and Edge, are not supported by Cypress.

Even though Chrome is now the most used browser (with a 70% market share), ensuring that your web applications work properly across browsers is still a prerequisite for many test projects.

However, owing to variations in these code branches, there are discrepancies across Chromium-based browsers that Cypress claims to support, such as Chrome and Electron.


Jumping Through Hoops

To design business-level testing, you must jump through hoops.

We don’t always have the luxury of creating low-level GUI interaction tests when operating in business contexts.

Low-level tests, such as the one below, are only appropriate for small-scale undertakings.

A somewhat different strategy is required for large-scale initiatives.

Consider different test methodologies to improve the readability of your tests if you often create high-level test steps or must explain your difficulties to business stakeholders who don’t care about programming.


No Support for Page Object Model Out Of the Box.

While the Page Object Model (POM) is the industry standard for Selenium projects, Cypress does not recommend that element locators be separated into a distinct layer of page objects.

The CSS selectors should be left within the tests, according to the instructions.

As many of us know, keeping element locators in the tests themselves is a definite way to make them more fragile.

Automated tests would be broken in droves if a tiny modification to the GUI was made.



With LambdaTest, you can perform Cypress E2E testing on a lightning-fast Cypress test execution cloud.

Built for scalability, a dependable, scalable, secure, and high-performing test execution platform.

Test on more than 40 different browsers and versions, including headless browsers. 

You may run Cypress tests in parallel to minimize test execution and developer feedback, allowing you to deploy your products quicker and more confidently. 

You can debug each test run using LambdaTest’s end-to-end test execution logs, including entire Cypress console logs, command logs, video logs, etc. 

Apart from this, you can utilize our enterprise-ready LambdaTest tunnel functionality to test your locally hosted or privately hosted web applications and websites.

Finally, a dedicated LambdaTest-Cypress CLI npm package makes it simple to install and execute Cypress-based tests on LambdaTest.

Author Bio:

Vixit Raj is Product Growth and Marketing Specialist in LambdaTest: The Cross Browser Web App Testing Platform.

An E&C engineering background & digital marketing domain experience of 5+ years has aroused his interest towards learning more about latest technology advancements, product marketing, coding and testing

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.