Testing your code¶
There a three complementary ways of testing your work: unit tests for the backend, unit tests for the frontend and integration tests.
Backend unit tests¶
The easiest way is to run Python tests with nosetest.
$ nosetests --immediate udata
You can launch a unique test too:
$ nosetests --immediate --stop --tests=udata/tests/api/test_datasets_api.py:DatasetResourceAPITest.test_reorder
If you want a fancy display, you can use the nose-mocha-reporter (not installed by default) with the dedicated option:
$ nosetests --with-mocha-reporter --immediate --stop --tests=udata/tests/api/test_datasets_api.py:DatasetResourceAPITest
Frontend unit tests¶
For frontend (and administration) testing, we use the following tools:
- Karma as test runner
- mocha as test framework
- Chai (and some plugins) as assertions library
- Sinon.JS for spies, stubs and mocks
All tests are located in the specs
directory and should have the following naming pattern
*.specs.js
to be recognized by Karma.
The most simple way to launch them is by using the dedicated invoke task:
$ inv jstest
It will run a single test pass using PhantomJS as browser.
You can run the tests continuously as changed are detected by the --watch
option:
$ inv jstest --watch
For more advanced usage, you can use the npm dedicated run-scripts:
# Single run in PhantomJS
$ npm -s run test:unit
# Watch and run tests on change in PhantomJS
$ npm -s run test:watch
You can pass any option to karma after the --
:
# Run tests a in new Chrome and Firefox instances
$ npm -s run test:unit -- --browsers Chrome,Firefox
# Single run with JUnit xml output
$ npm -s run test:unit -- --reporters mocha,junit
Note
If using Chrome launcher without chrome
being on the $PATH
(or using Chromium),
you need to specify the binary path by settings the environment variable
CHROME_BIN
See the official karma documentation for more details about the possible parameters.
Testing on IE¶
You can run the test suite under Modern.ie VMs installed with either ievms or iectrl (installation is detailed on websites).
# Install IE11 under Win7 (time to have one or more coffee!)
$ iectrl install 11
# Run tests under IE11
$ npm -s run test:unit -- --browsers 'IE11 - Win7'
Note
uData tests ensure the compatibility with IE version(s) officially supported by Microsoft. Right now, it’s IE11.
You maybe need to manually close the first time popup on first run. To do so, launch the VM then launch the test suite:
$ iectrl start 11
$ npm -s run test:unit -- --browsers 'IE11 - Win7'
# You can close it after
$ iectrl close 11
Integration tests¶
We use Watai which is using webdriver API on top of Selenium.
First, install and launch Selenium:
$ selenium-server -p 4444
Then install watai and now you can run integration tests:
$ watai specs/integration/ --config '{"email":"name@example.org","password":"yourpassword","username":"yourusername"}'
You can easily exclude some tests if you want to run a particular range of test(s), here to run only test 4:
$ watai specs/integration/ --config '{"ignore":[1,2,3,5,6,7], "email":"name@example.org","password":"yourpassword","username":"yourusername"}'
Check out the Watai tutorial to add your own tests!