Dokku has a full test suite to assist in quick iterating development. These tests include a linter using shellcheck, functional unit tests using the Bats testing framework, and a deployment suite of example apps that use the most popular languages and frameworks.
We maintain the Dokku test harness within the
tests/unit/*.bats: Bats tests
tests/apps/: Example applications that can be used for tests
All pull requests have tests run against them on CircleCI, a continuous integration platform that provides Docker support for Ubuntu Trusty 14.04.
If you wish to skip tests for a particular commit, e.g. documentation changes, you may add the
[ci skip] designator to your commit message. Commits that should be tested but have the above designator will not be merged.
While we do provide official packages for a variety of platforms, as our test suite currently runs on Ubuntu Trusty 14.04, we only provide official installation support for that platform.
Local Test Execution
- Setup Dokku in a Vagrant VM.
- Run the following to setup tests and execute them:
After making changes to your local Dokku clone, don't forget to update the Vagrant Dokku install.
Additionally you may run a specific app deployment tests with a target similar to:
For a full list of test make targets check out
tests.mk in the root of the Dokku repository.
Executing a single test suite
When working on a particular plugin, it may be useful to run only a particular test suite. This can be done by specifying the test suite path:
It is also possible to target multiple test suites at a time.
Executing a single test
In order to increase testing velocity, a wrapper script around Bats is available that can be used to run a single test case within a suite.
Tests within a suite may be listed by specifying the suite as a parameter to the
A single test can be specified as a second parameter. The test is selected by fuzzy-match, and only the first match is executed.
Some special characters are translated in the test listing, specifically the characters
( ) :, while others are not. The fuzzy matching happens on test names as listed by this script, so executing a test with a more specific name will work as expected.