How our test suite works

This documentation describes how our test suite works and how you can interact with it. It is mainly oriented for people wanting to contribute to theses libraries.

We test each components with a global composer configuration. On repository root you can find a composer.json file that contains all components dependencies, in our CI we install theses dependencies then we tests all components.

If you want to run it locally, you can do:

composer update
vendor/bin/phpunit

You can also run same commands to test a single component, you just have to cd inside the component first:

cd src/JsonSchema
composer update
vendor/bin/phpunit

We mainly use JsonSchema / OpenAPI fixtures for our tests. When we add a feature, we create a new folder in related component tests folder with a schema related to the added feature. That way when we run tests, it will generate a generated/ folder that will be compared with a expected/ that contains generated files like they should be.

If you just created a fixture folder and don’t have expected/ folder, just run tests and check manually generated/ files and if everything is ok, you can copy the folder and name it expected/. If you have to do this on multiple fixtures, you can use ./replace-all-expected-fixtures.sh script. It will copy all generated/ into expected/ folder. So please be sure that everything is okay before running this script.

By default, we don’t run generated client related tests locally, because you need to run stoplightio/prism with configuration as following:

  • nohup prism mock -p 4010 -m src/OpenApi3/Tests/client/openapi.yaml &
  • nohup prism mock -p 4011 -m src/OpenApi2/Tests/client/swagger.yaml &

Both theses will run a “fake” API based on the given OpenApi scheme. If you want to see logs, you can remove nohup and & keywords on given commands. With theses servers running you can now run generated client tests with vendor/bin/phpunit --exclude-group none command. Even if we don’t run theses tests locally, they will always run on CI.