Testing With Codeception
Elentra uses Codeception as its integrated testing environment. It allows you to create and run unit tests, integration tests, and functional tests separately or together.
Unit tests are designed to run quickly and test small portions of code that have no external dependencies. For example, testing a function that takes a Models_User
object and returns an array with the name, address, and email.
Integrations tests are for testing multiple units that work together. An example would be an API call to get a list of a given Learner's courses.
Functional tests will test the interaction of code that is in multiple integration tests, like a Learner's dashboard page that contains a list of courses, Message Centre, Assessments, etc.
Codeception test files are found in the /developers/tests
section of your Elentra ME development environment, and basic configuration is in /developers/codeception.yml
. Configuration for the individual kinds of tests can be found in /developers/tests/*.suite.yml
The Difference Between Unit and Integration Testing
Unit Testing | Integration Testing |
---|---|
Unit tests mock interactions with external dependencies (database, IO, etc.) | Integration tests use the real dependencies |
Developers write unit tests | Testers or other QA professionals usually write integration tests |
Unit tests provide precise feedback | Integration tests provide less precise feedback |
It tests a unit without the need for other units to be complete | The units must all be complete |
Developers run unit tests on their machines frequently | Developers run integration tests on their machines less frequently, or not at all |
The CI server runs the unit test suite at each commit to the main branch or check-in | The CI server might run integration tests less often, as they need a more involving setup process and are slower to run |
Unit tests are easier to write | Integration tests are harder to write |
Unit tests can be run in any order, or even simultaneously | Integration tests usually required a strict order and can’t be run simultaneously |
Unit tests are stable | Integration tests can experience instability due to reliance on remote resources and potential network conditions |
Last updated