Implementing tests into existing e-commerce code. A strategy that works.
Author:
Agata Zalewska
Implementing tests into existing e-commerce code. A strategy that works.
24-03-2025

To test or not to test? That is the question!

If Shakespeare were a software developer today, he’d likely ponder this existential dilemma while debugging legacy code. Every dev working with an e-commerce system has faced this moment - standing at the crossroads of adding tests or trusting the code will somehow survive another release. But let’s be honest: the latter rarely ends well.

Picture this: your e-commerce platform is running smoothly, customers are placing orders and everything seems fine... until a small code change causes a catastrophic checkout failure. The support inbox explodes, sales collapse and you find yourself in the middle of a production fire. Sounds familiar? That's why testing is not an optional luxury. It's a necessity.

The good news? You don't have to rewrite your entire system overnight to introduce testing. Instead, you can take a strategic, step-by-step approach that minimizes risk and maximizes stability. In this guide, we'll explore the best ways to implement testing into an existing e-commerce system without disrupting development cycles.

How to start implementing tests in an existing codebase?

There is no universal approach to introducing testing into legacy systems (sorry!). Each case is unique, depending on code structure, development history and team policy. However, there are proven strategies to help minimize risk and implement testing effectively.

Before jumping into implementation, it is important to understand the basic types of tests and their functions. In the world of software testing, there are several main categories:

  • Unit Tests – verify individual units of code, such as methods or classes, in isolation. They execute quickly and help detect errors in early development.
  • Integration Tests – check the interaction between different system modules, helping to identify communication issues between application components.
  • End-to-End (E2E) Tests – simulate real user behavior, covering the full business process from the end-user perspective.
  • Acceptance Tests – ensure that the system meets client requirements and is ready for production deployment.
  • Performance Tests – evaluate the speed and stability of the system under varying loads.
  • Regression Tests – ensure that new changes do not introduce bugs into existing functionality.

Choosing the right tests depends on the specifics and priorities of the project. For e-commerce systems, E2E and acceptance testing are critical to ensure that core processes such as checkout, payments and inventory management work seamlessly.

Identifying key areas

The first step in effectively implementing testing is to determine which parts of the system have the greatest impact on business and user experience. Not all application components need to be tested immediately - priority should be given to processes that generate revenue and are critical to system stability.

In e-commerce systems, critical areas include:

  • Checkout – from adding a product to the cart to payment selection and order finalization. This is one of the most sensitive areas in any online store, and failures can lead to immediate revenue loss.
  • Login and registration – these functionalities shape the user's first impression and further interaction with the platform. Login issues can lead to cart abandonment and customer frustration.
  • Payment processing – even minor errors in the payment process can cause significant financial losses and ruin customer trust. Testing payment gateway integrations, refunds, and chargeback processes is essential.
  • Promotions and discount codes – promotional systems are often complex and contain intricate business rules. They frequently cause logic errors that may lead to financial losses or system abuse.

Effective testing starts with risk analysis. Instead of attempting to test every function immediately, focus on areas where failures have the most significant consequences. This optimizes time and resources while ensuring the highest quality of key business processes.

Gradual refactoring for testability

The absence of tests often stems from outdated code structures. In older systems, developers did not consider testability, leading to monolithic architectures where different modules are tightly coupled. This makes introducing tests challenging. Instead of rewriting everything from scratch, it’s best to refactor the code gradually, making it more testable and modular.

The refactoring process should involve the following actions:

  • Extracting large chunks of business logic into separate classes and modules – improves code readability and facilitates testing individual components.
  • Implementing Dependency Injection (DI) – makes it easier to isolate testable components, eliminating the need for static dependencies.
  • Reducing the usage of static methods and singletons – eliminates the global application state, making unit tests more predictable and easier to execute.
  • Modularizing the code – dividing the application into smaller, independent components increases flexibility and enables efficient testing of individual system parts.

What’s important, you don’t need to cover all the application with tests at once! Every single change can be an opportunity to introduce appropriate tests, gradually increasing test coverage across the system. By improving the quality of the code with small changes, we're able to achieve significant effects in the long run.

Gradual refactoring allows for a smooth introduction of tests without destabilizing the system.

Problems with testing. A thought from Mateusz

Testing is not a silver bullet that magically solves all development issues. For less experienced developers, introducing tests can feel like a significant investment, often extending the time required to deliver new features. However, this investment pays off remarkably well in the long run. Over time, it makes the application easier to maintain and helps catch and fix bugs more efficiently.

If you have the opportunity, it’s always a good idea to leverage the expertise of someone experienced who can guide you into the world of testing, helping you avoid common pitfalls and speed up the learning process.

Mateusz Zalewski

Sylius, a test-first e-commerce platform 

Sylius is an open-source e-commerce platform built on PHP and Symfony, designed to provide flexibility and scalability for businesses of all sizes. One of its greatest benefits is its high level of customizability, allowing businesses to tailor every aspect of their e-commerce platform to suit their unique needs.

An integral part of Sylius’s architecture is its strong focus on testing. The platform was built with BDD (Behavior-Driven Development) and TDD (Test-Driven Development) methodologies in mind, allowing developers to ensure code quality from the beginning. While testing is not mandatory in Sylius projects, it is highly recommended, as the framework provides a robust testing platform out of the box, making it easier to adopt best testing practices. Additionally, analyzing Sylius’s built-in tests can serve as a great reference point for teams looking to introduce a proper testing strategy into their projects, helping to establish a structured and effective testing workflow.

For businesses looking for a modern, extensible, and developer-friendly e-commerce solution, Sylius stands out as a superior alternative to traditional monolithic platforms.



Testing is not just about finding bugs - it is about building confidence in a system. In e-commerce, where every transaction matters, implementing a structured testing approach using Sylius and TDD can be a game changer. Whether you are dealing with an existing monolithic system or developing a new platform, prioritizing testability ensures long-term maintainability and performance stability.

© Copyright 2025. Woven with 💛 in Łódź