Testing

Testing Strategy

Testing is a crucial aspect of every software development life cycle. To ensure the high quality of the solution, it was our first priority to cover the codebase with extensive unit, integration and end-to-end tests. We achieved close to 100% of code coverage and were confident in the quality of the project.

The tests were of two types:

  • Automated: Backend unit and integration tests, frontend snapshot tests, and end-to-end tests.

  • Semi-automated: Responsive design tests, user acceptance tests, compatibility tests.

Backend Unit and Integration Tests

In order to test our Node.js backend, we used Jest, which makes JavaScript testing seamless, highly configurable, and provides coverage reports.

We created a new database specifically for testing purposes and populated it with dummy data. We have also written an SQL script that would clean up the testing database before running the test suites. In order to populate the data correctly as the tests ran and to give a structure to testing we have a CustomSequencer.js file.

In our backend, the line between unit and integration tests is blurred so we combined it into one. For the backend middleware, those were unit tests, and for the endpoints, we were sending requests to the API, which is essentially integration testing.


We have tested every single endpoint and achieved the following test coverage:

Frontend Snapshot Tests

To test against the regression and unintended side effects in our frontend components, we used the snapshot testing technique. Luckily, Jest provides snapshot testing support, so we stuck to it.

We have used the dummy credentials created from the backend tests and mocked the Redux state accordingly to test every single frontend component in the system.

The snapshots were generated and added to the GitHub repository. Snapshot testing helped to avoid regressions during the development process.

End-to-end Tests

End-to-end testing was crucial in our project as it bring both the frontend and the backend together. Cypress is the tool we used for that. Cypress is a great end-to-end testing framework and provides time travel functionality which helped uncover subtle bugs in the system.


All the tests passed and the system has proven to be functioning correctly.

User Acceptance Tests

For user acceptance tests, we were lucky to get feedback from the clinicians who would be using our application and from other people who fit our user persona.

Overall, every user has given very positive feedback, and our clients were ecstatic with the usability of the application and its HCI component.

Here are some examples of users’ feedback:


After receiving feedback from users, we made sure make the requested improvements.

Responsive Design Tests

For responsive design testing, we used Chrome and Firefox developer tools and simulated several devices of different screen resolution.

Our application has proven to be very responsive and passed all the tests in different screen sizes.

The following are some of the screenshots:



Compatibility Tests

To ensure our application functions as intended regardless of the device, operating system, or software, we performed compatibility tests.

We tested the application on Windows 10, Ubuntu 20.04, Ubuntu 20.10, Pop.OS 20.10, macOS in all following browsers: Firefox, Google Chrome, Microsoft Edge, Safari.

We were excited to see that the application was compatible with different devices, browsers and operating systems!