RSpec::Parallel
Parallel spec runner for RSpec 3.
Install
$ gem install parallel-rspec
Getting Started / Usage
Parallel-rspec bundles parallel-rspec
binary which can be used directly:
$ parallel-rspec spec
If spec/parallel_spec_helper.rb is found, the parallel-rspec
command loads it before starting the test. Since parallel-rspec uses fork(2) to spawn off workers, you must ensure each worker runs in an isolated environment. Use the after_fork
hook to reset any global state.
RSpec::Parallel.configure do |config|
config.after_fork do |worker|
# Use separate database.
ActiveRecord::Base.configurations["test"]["database"] << worker.number.to_s
ActiveRecord::Base.establish_connection(:test)
end
end
In this case, your workers assume sequence of databases exist and has right schema already. Rspec-parallel ships with db:test:prepare_sequential
rake task to prepare them for your Rails application:
$ rake db:test:prepare_sequential
Controll concurrency
The number of workers spawned by parallel-rspec is the number of available CPU cores by default. To controll the concurrency, use concurrency
configuration option:
RSpec::Parallel.configure do |config|
config.concurrency = 4
end
db:test:prepare_sequential
task takes concurrency as an argument.
$ rake "db:test:prepare_sequential[4]"