Testing#

edx-enterprise has an assortment of test cases and code quality checks to catch potential problems during development.

Running all of the python tests#

To run all unit tests and quality checks in the version of Python you chose for your virtualenv.

Alternatively, docker can be used to provide a containerized shell to run the commands below inside.

$ make test-shell
$ make validate

To run just the unit tests:

$ make test

To run just the unit tests and check diff coverage

$ make diff_cover

To run the unit tests under every supported Python version and the code quality checks:

$ make test-all

To run all tests under certain python versions and edx-platform dependency environments:

$ tox -e py35-master   # run all tests under python 3.5 and master branch dependencies

Code coverage#

To generate and open an HTML report of how much of the code is covered by test cases:

$ make coverage

There is a useful pytest.local.ini file that helps with looking at coverage of only a single module at a time:

$ pytest tests/test_enterprise/api -c pytest.local.ini --cov=enterprise.api

Running subsets of tests#

Various options to run only subset of tests:

$ pytest tests/test_admin/              # run all tests in tests/admin folder
$ pytest tests/test_enterprise/api      # run all tests in tests/test_enterprise_api folder
$ pytest tests/test_enterprise/api/test_permissions.py  # run all the tests in the test_permissions.py file

# run all tests in TestEnterpriseCustomer test suite file
$ pytest tests/test_models.py::TestEnterpriseCustomer

# run only `test_ready_connects_user_post_save_handler` in `TestEnterpriseConfig` suite
$ pytest tests/test_apps.py::TestEnterpriseConfig::test_ready_connects_user_post_save_handler

Quality#

To run just the code quality checks:

$ tox -e quality

To run quality checks on specific files:

# run the PEP8-style checks on one file (fast)
$ pycodestyle enterprise/api/v1/views.py

# run pylint on one file (not as fast)
$ pylint enterprise/api/v1/views.py

# use isort to fix imports, --check-only means see what isort would change without actually changing it
$ isort --check-only enterprise/api/v1/views.py

# use isort to actually change the file(s)
$ isort enterprise/api/v1/views.py enterprise/api/v1/permissions.py