- Specjour always starts a listener daemon unless one is already running. This means you're always sharing your cores by default.
specjour stop
stops the daemon running for the current project- Your machine will share half available cores when running tests for a remote machine. This enables you to continue working while sharing your cpu.
- The listener can be run in the foreground with
specjour -f listen
. - A constant number of workers can be set by the
-w
flag. Use this to set up a daemon on a machine devoted to specjour:nohup specjour listen -w 4
- Failing tests will be rerun after the suite completes. Disable with:
Specjour.configuration.rspec_rerun = false
- The bonjour register/browse design has been flipped. Now, the listeners synchronously browse while the printer asynchronously advertises. This allows a listener to join the workers midway through a test run.
- You can run specjour on a single file, wherein all examples in the file will be distributed.
- Rspec and Rails are now treated as plugins. The plugins system is still a little rough, but should allow for adapting specjour to other testin frameworks like minitest and cucumber.
- Specjour uses its own formatter, instead of reusing an rspec formatter. The formatter is configurable which allows plugin authors to create the fomatter which best suits them.
- Specjour now launches a separate listener per project. This supports running specjour on two or more projects that have different Ruby versions.
- Removed the dependency on DRB.
- Removed the dependency on thor.
- Introduce a global specjour directory ($HOME/.specjour) to hold the lock file and daemon pids
- [fixed] printer exit_status returns false if there are no reporters
- [fixed] regression when running a subdirectory. Specjour was loading all specs, even those outside of the default spec directory, i.e. a fast_specs/ directory.
- [fixed] "file has vanished" bug. The specjour listener can now transition between networks without restarts.
- [fixed] before(:all). Specjour now distributes before(:all) as a group. Previously, each example would be distributed alone, effectively turning before(:all) into before(:each).
- [added] Cucumber now distributes individual scenarios instead of files
- [fixed] Cucumber runs more than one feature (pierreozoux)
- [fixed] RSpec 2.12 compatible
- [fixed] Not gathering all listeners (waits a full second for all replies)
- [fixed] Not killing all child processes
- [fixed] RSpec 2.11 compatible
- [fixed] Undefined method errors when printer closes before clients disconnect
- [added] RSpec formatter configurable via
Specjour::Configuration.rspec\_formatter
- [changed] Always send KILL signal when terminating processes
- [fixed] Observe filtered examples set in the RSpec configuration object
- [fixed] File location for contexts within shared examples
- [fixed] No longer prints tests that have yet to run when interrupting the process with CTRL-C
- [fixed] Use the correct file location for shared examples. As in, actually run them.
- [fixed] First RSpec test to load would run twice
- [added] Rsync options are now customizable via
Specjour::Configuration.rsync\_options=
Useful when running on machines that use a combination of vendored gems and gemsets, i.e.
-aL --delete --ignore-errors --exclude=vendor/ruby --exclude=.bundle
- [added] Benchmark times for various system status messages
- [fixed] Specjour hang when attempting to resolve a bonjour reply
- [fixed] Specjour executes loader under current $LOAD_PATH
Specjour no longer assumes the required gems are available globally. Useful when running specjour under a vendored environment (bundle install --path=vendor).
- [fixed] Now compatible with thor 0.15.x
- [fixed] Not running specs without 'spec/' argument
- [fixed] Writing to a nil socket; timeout too small (josephlord)
- [fixed] Eagerly loading Rspec (jgdavey)
- [fixed] Load path incorrectly matching specjour (jgdavey)
- [fixed] Binary path used by Loader
- [fixed] Specjour prepare wouldn't wait for managers to complete
- [fixed] Slower machines adding completed tests back to suite
- [fixed] Dispatcher hanging after printing the report
- [added] More verbosity during startup
- [changed] Printer uses UNIX select instead of GServer (threads)
- [changed] Database is always dropped and reloaded using schema.rb or structure.sql
- [removed] RSpec < 2.8 compatibility
- [added] Memory utilizing forks. No longer forking and execing means workers start running tests faster.
- [added] Configuration.after_load hook; runs after loading the environment
- [added] Configurable rsync port
- [added] Specs distributed by example, not file! Means better distribution/fast spec suites.
- [added] Rails compiled asset directory (tmp/cache) to the rsync inclusion list. Workers won't have to compile assets during integration tests.
- [fixed] SQL structure files can be used to build the database.
- [fixed] Long timeout while waiting for bonjour requests. The bonjour code has been rewritten.
- [fixed] Load specjour in its own environment when running bundle exec specjour
- [fixed] Forks running their parent's exit handlers.
- [fixed] Database creation when the app depends on a database upon environment load (something as simple as a scope would cause this dependency). As long as the regular test environment can be loaded, a worker without a database shouldn't raise an exception, instead the db should be created.
l4rk and leshill
- [fixed] Cucumber failure reports not displayed
l4rk and leshill
- [added] Remove Jeweler
- [added] Use RSpec2 for development
- [added] Cucumber 0.9+ compatibility
- [added] RSpec2 compatibility
- [removed] No longer supporting RSpec 1 and Cucumber 0.8
- Stopping bonjour actually stops the currently running service
- Only retry connecting to a DRb object 5 times instead of timing out trying to connect to one bad connection
- Set correct process name when the dispatcher starts a listener
- [fixed] Cucumber output for scenario outlines (delitescere & supaspoida)
- [fixed] Undefined shared examples in Rspec2
- [fixed] INT signal sent to managers and workers, sets wants_to_quit where appropriate for Rspec2 and Cucumber
- [fixed] Error reporting for failed steps within a Background
- [added] Cucumber 0.9.x compatibility
- [added] RSpec 2.0.0 compatibility
- [fixed] Custom hooks now load in Ruby 1.9.2
- [fixed] Specjour prepare correctly recreates the db
- [added] Support for loading test DB from SQL file (config.active_record.schema_format = :sql)
- [added] Rsync failures raise Specjour::Error
-
[fixed] Distributing absolute paths to remote machines.
-
[added] Workers print the elapsed time of each test (redsquirrel)
-
[added] Dispatcher loads specjour/hooks.rb, useful for monkey patching (redsquirrel)
-
[changed] Decreased timeout to 2 seconds when searching for remote managers
- [fixed] Ruby 1.9.2 support through minor changes and DNSSD upgrade
- [fixed] DbScrub.drop actually invokes the db:drop rake task
- [fixed] Prepare task ignores rspec's at_exit callback, disabling the test suite from running after the prepare task completes.
-
[fixed] Shared example groups now supported in Rspec2
-
[removed] Hyperthread detection removed as it proved too unstable while running selenium
- [fixed] Only print cucumber summary when running features
-
[fixed] Cucumber prints elapsed time
-
[added] Print hostname for each hostname (closes gh-8)
-
[added] Rspec2 support
-
[fixed] Cucumber compatibility with 0.8.5
-
[fixed] The before_fork hook did not work in the rc1 because the custom hooks were loaded by the worker (after fork). We could have the manager preload the app but then you'll have stale managers. Instead, custom hooks are now located in the .specjour/hooks.rb file, essentially living outside of your application.
-
[changed] The generated rsyncd.conf now syncs the .specjour directory allowing hooks to be loaded by managers and workers.
-
[removed] Rake tasks have been removed, use the command-line instead.
-
[added] Thor is now used to parse command-line arguments. Try
specjour help
for more details. -
[added] Test discovery. Features will be autodiscovered by looking for a
features
directory in your project. If you only want to run features, usespecjour dispatch project_path/features
. -
[changed] No longer need to run a manager and a dispatcher in separate processes. When not distributing to other computers, simply run
specjour
in your project directory to run the suite among the number of cores on your machine. -
[added] Project aliases. If you want to isolate a few computers in the cluster, tell them to listen for a different project name and run the dispatcher with that new name.
$ specjour listen --projects foo2 $ specjour dispatch --alias foo2
-
[added] Preparation. Running
specjour prepare
invokes theSpecjour::Configuration.prepare
block on each worker. By default this drops the worker's database and brings it back up. -
[removed] --batch option which sent back results in batches. Now that each spec is run one at a time, batching no longer makes sense.
-
[removed] Global listening. You now must provide the project names you want to run specs for. Defaults to the project in your current working directory.
$ specjour listen --projects foo bar
-
[fixed] Rsync copies symbolic links. gh-6
-
[fixed] DbScrub explicitly requires its dependencies and no longer loads the Rakefile. gh-10
- [changed] The rails plugin now runs in a Rails.configuration.after_initialize block
- [added] Correct exit status
- [fixed] Will reconnect when connection is lost while requesting tests
-
[fixed] Absolute paths in rsyncd.conf restrict portability. The rsync daemon completely fails when it can't find the path to serve which typically happens running specjour on another computer. Remove your rsyncd.conf to regenerate a new one. Back it up first if you've made changes to it. Backwards Incompatible
-
[fixed] CPU core detection works on OSX Core i7 (thanks Hashrocket!)
- [added] Backtrace for cucumber failures
- [added] The rsync daemon configuration file now lives in project_path/.specjour/rsyncd.conf. Edit your rsync exclusions there.
- [fixed] Don't report connection errors when CTRL-C is sent.
- [added] Cucumber support.
rake specjour:cucumber
- [added] CPU Core detection, use -w to override with less or more workers