Main goal of these integration tests is to test entire system with the database and without any external services.
What, how and why we test:
-
Handling input
How HTTP traffic is handled (standard HTTP requests, websocket communication), to ensure proper response on valid, invalid or harmful input.
-
Configuration
How system behaves under different settings to cover as much different configuration scenarios as possible.
-
Security
Are we handling access control and log events (audit log) properly? All services and data should be protected to prevent unwanted access and modifications.
-
Scenarios
Are complex scenarios executed as designed (e.g. is password recovery email sent and can link from the email be used)
-
Integration with external services
All external services (with exception to database) are mocked but we do test if communication to these services take place and if
-
Database schema & data migrations
Tests can be executed on SQLite in-memory database for performance and isolation purpuses
To run integration tests once:
make test.integration
For development, you can watch file-system changes (with nodemon
utility) and
rerun-tests everytime:
make watch.test.integration
This can be combined with any of the testing suits and flavours described below.
all
: shared + services + integrationintegration
integration tests (from API to the DB)pkg
,internal
: shared packages (ran as one)federation
,system
,compose
: services
See Makefile
internals for details.
test.<suite>
runs simple tests on a specific suitetest.cover.<suite>
run tests with -cover and -covermode=$COVER_MODEtest.coverprofile.<suite>
run cover tests with -coverprofile=$COVER_PROFILE
See Makefile
internals for details.
If you want some colors in your CLI, you can use rakyll/gotest.
GOTEST=$GOPATH/bin/gotest make watch.test.integration
make watch.test.integration.workflow TEST_FLAGS="-v -run Test0011_termination"
This will watch for file changes and run workflow tests in verbose mode. Only tests starting with Test0011_termination will be executed.