Running the test suites
Each ManageIQ component (providers, UI, vmdb, automation engine, etc.) contains its own set of specs. Most of them can be run by executing
$ bundle exec rake
Components that require non-standard invocation of the test suite are documented in the remaining part of the document.
Running the vmdb suite
The ManageIQ test database needs to be setup before the test suite can be run.
This is automatically created if you run bin/setup
or bin/update
, but can
also be created using bundle exec rake test:vmdb:setup
.
To run the suite, execute:
$ bundle exec rake
There are some other test related tasks available and those can be listed by running
$ bundle exec rake -T test
Running the vmdb suite in parallel
The main vmdb
suite of tests can be run in parallel, utilizing multiple
processor cores. These separate processes run concurrently and are then
collected and reported on together when they all complete their delegated work.
You can run the entire vmdb suite or select spec files within it.
Setup
Running tests in parallel requires as many different databases as cores you plan to run on.
To set up these databases, simply execute the following command:
$ PARALLEL=true bin/rake test:vmdb:setup
Run the entire suite in parallel
You can run the entire suite in parallel using the following command:
$ PARALLEL=true bin/rake test:vmdb
Passing RSpec options to the rake tasks
RSpec accepts a SPEC_OPTS
environment variable to pass command line flags.
This is necessary when you wish to use some command line option with our
built-in rake commands to run the tests.
For example, I may wish to set a particular seed and stop running the tests immediately on a failure:
$ PARALLEL=true SPEC_OPTS="--seed 1234 --fail-fast" bin/rake test:vmdb:setup
Note that --fail-fast
will stop whichever core encountered the error, not
every core at the first error found.
Running specific spec files in parallel
You needn’t run the entire vmdb suite to take advantage of running tests in
parallel. Use parallel_rspec
to run specific directories of spec files.
For example, I may have done some work on the front end and want to run the controller, helper, and view specs specifically:
$ parallel_rspec spec/controllers spec/helpers spec/views
This will run all of the specs in their respective directories, in parallel.
Note you do not need PARALLEL=true
using parallel_rspec
.
Other tips:
-
You can get creative with searching and globbing patterns to feed to the
parallel_rspec
command. For example, I might have recently made some pretty drastic changes to role checking code having to do with a method named#role_allows
. To quickly run specs that might touch this code, I can pass in all tests that mention it directly:$ parallel_rspec `git grep -l role_allows spec`
-
Each core requires a certain amount of overhead involved with loading all of the application code, etc. Always running the maximum number of cores available isn’t always beneficial to fast tests. If you’re running a subset of tests and parallel_tests reports that you’re running a very small number of specs across each core, try using fewer cores doing more work instead. You can specify the number with the
-n
option. For example, to run all the request specs with four cores:$ parallel_rspec -n 4 spec/requests
-
We use the parallel_tests gem to make all of this possible - Go check out the documentation to learn even more things you can do with running ManageIQ tests in parallel!
Running UI specs
Running the test suite for manageiq-ui-classic
requires a bit more
preparation.
These instructions assume that you have manageiq
and manageiq-ui-classic
cloned into /home/u/miq/manageiq
and /home/u/miq/manageiq-ui-classic
respectively and that both repositores have the right branch checked out.
First, you need to symlink the core repo into spec folder of the UI repo:
$ ln -s /home/u/miq/manageiq /home/u/miq/manageiq-ui-classic/spec/manageiq
Next, you need to ensure that /home/u/miq/manageiq/bundler.d/overrides.rb
file contains a block like this:
override_gem "manageiq-ui-classic", path: "/home/u/miq/manageiq-ui-classic"
Now you must run bin/update
from the /home/u/miq/manageiq
folder, followed
by bin/update
from the /home/u/miq/manageiq-ui-classic
folder.
After all this is done, you can run tests as usual:
$ bundle exec rake
To run the javascript specs in spec/javascripts/**/*_spec.js
in a headless
browser, you can run
$ bundle exec rake spec:javascript
For debugging, rake environment jasmine
runs a webserver listening on
localhost:8888
.
You can also list all test-related rake tasks by running
$ bundle exec rake -T spec