rspec-expectations-2.9.1 is released! »
Created at: 03.04.2012 22:18, source: David Chelimsky, tagged: bdd rspec ruby
This is a bug-fix only release, and is recommended for everybody using rspec-2.9.
Bug fixes
- Provide a helpful message if the diff between two objects is empty.
- Fix bug diffing single strings with multiline strings.
- Fix for error with using custom matchers inside other custom matchers (mirasrael)
- Fix using execution context methods in nested DSL matchers (mirasrael)
more »
rspec-rails-2.8.1 is released »
Created at: 05.01.2012 07:43, source: David Chelimsky, tagged: bdd rspec rails ruby
Bug fix release
The rails-3.2.0.rc2 release broke stub_model in rspec-rails-2.0.0 > 2.8.0.
The rspec-rails-2.8.1 release fixes this issue, but it means that when you
upgrade to rails-3.2.0.rc2 or greater, you’ll have to upgrade to
rspec-rails-2.8.1 or greater.
Because rspec-rails-2.8.1 supports all versions of rails since 3.0, I recommend that you upgrade to rspec-rails-2.8.1 first, and then upgrade to rails-3.2.0.rc2 (or 3.2.0 once it’s out).
Changelog
http://rubydoc.info/gems/rspec-rails/file/Changelog.md
Docs
http://rubydoc.info/gems/rspec-rails
http://relishapp.com/rspec/rspec-rails
more »
RSpec-2.8 is released! »
Created at: 05.01.2012 04:38, source: David Chelimsky, tagged: bdd rspec ruby
We released RSpec-2.8.0 today with a host of new features and improvements since 2.7. Some of the highlights are described below, but you can see the full changelogs at:
- http://rubydoc.info/gems/rspec-core/file/Changelog.md
- http://rubydoc.info/gems/rspec-expectations/file/Changelog.md
- http://rubydoc.info/gems/rspec-mocks/file/Changelog.md
- http://rubydoc.info/gems/rspec-rails/file/Changelog.md
Documentation
While not 100% complete yet, we’ve made great strides on RSpec’s RDoc:
- http://rubydoc.info/gems/rspec-core
- http://rubydoc.info/gems/rspec-expectations
- http://rubydoc.info/gems/rspec-mocks
- http://rubydoc.info/gems/rspec-rails
http://rspec.info is now just a one pager (desperate for some design love - volunteers please email rspec-users@rubyforge.org). All the old pages are redirects to the relevant RDoc at http://rubydoc.info. RSpec-1 info is still available at http://old.rspec.info.
We’ve still got Cucumber features up at http://relishapp.com/rspec, but we’re going to be phasing that out as the primary source of documentation. There are a lot of reasons for this, and I’ll try to follow up with a separate blog post on this topic.
rspec-core
Improved support for tags and filtering
You can now set default tags/filters in either RSpec.configure or a .rspec
file and override these tags on the command line. For example, this configuration
tells rspec to run all the examples that are not tagged :slow:
# in spec/spec_helper.rb RSpec.configure do |c| c.treat_symbols_as_metadata_keys_with_true_values = true c.filter_run_excluding :slow end
Now when you want run those, you can just do this:
rspec --tag slow
This will override the configuration and run onlly the examples tagged :slow.
–order rand
We added an --order option with two supported values: rand and default.
rspec --order random (or rand) tells RSpec to run the groups in a random
order, and then run the examples within each group in random order. We
implemented it this way (rather than complete randomization of every example)
because we don’t want to re-run expensive before(:all) hooks. A fair tradeoff,
as the resulting randomization is just as effective at exposing
order-dependency bugs.
When you use --order random, RSpec prints out the random number it used to
seed the randomizer. When you think you’ve found an order-dependency bug, you
can pass the seed along and the order will remain consistent:
--order rand:3455
--order default tells RSpec to load groups and examples as they are declared
in each file.
rspec –init
We added an --init switch to the rspec command to generate a “spec”
directory, and “.rspec” and “spec/spec_helper.rb” files with some starter code
in them.
rspec-expectations
We discovered that the matcher DSL generates matchers that run considerably slower than classes which implement the matcher protocol. We made some minor improvements in the DSL, but to really improve things we re-implemented every single built-in matcher as a class.
more »
rspec-2.8.0.rc1 is released »
Created at: 06.11.2011 19:02, source: David Chelimsky, tagged: bdd rspec ruby
I just released rspec-2.8.0.rc1, which includes releases of rspec-core, rspec-expectations, rspec-mocks, and rspec-rails. Changelogs for each are at:
What’s new
Nothing really changed in rspec-rails or rspec-mocks, but rspec-core and rspec-expectations have both gotten some nice improvements.
Configuration (rspec-core)
rspec-core offers a number of configuration options which can be declared on
the command line, in a config file (.rspec, ~/.rspec, or custom location),
as well as in an RSpec.configure block (in spec/spec_helper.rb by
convention). Before this release, some options, but not all, could be stored in
config files and then overridden on the command line. The problems were that it
was inconsistent (not all options worked this way), and we couldn’t override
options that were set in RSpec.configure blocks.
With this release, almost all options declared in RSpec.configure can be
overridden from the command line, and --tag options can override their
inverses. For example, if you have this in .rspec:
--tag ~slow:true
That means “exclude examples tagged :slow => true“. So the following example
would be excluded:
it "does something", :slow => true do # ... end
You can also exclude that example from RSpec.configure like this:
RSpec.configure do |c| c.filter_run_excluding :slow => true end
Note: the naming is different for historical reasons, and we will reconcile
that in a future release, but for now, just know that --tag on the command
line and in .rspec is synonymous with filter_run_[including|excluding] in
RSpec.configure.
Override from command line
Whether the default is stored in .rspec or RSpec.configure, it can be overridden
from the command line like this:
rspec --tag slow:true
“Profiles” in custom options files
The rspec command has an --options option that let’s store command line args in
arbitrary files and tell RSpec where to find them. For example, you could set things
up so your normal spec run excludes the groups and examples marked :slow by putting
this in .rspec:
--tag ~slow
Now add a .slow file with:
--tag slow
Now run rspec to run everything but the slow specs, and run rspec --options
.slow or rspec -O.slow to run the slow ones.
Override from Rake task
RSpec’s Rake task supports an rspec_opts config option, which means you can
set up different groupings from rake tasks as well. The fast/slow example above
would look like this:
namespace :spec do desc "runs the fast specs" do RSpec::Core::RakeTask.new(:fast) do |t| t.rspec_opts = '--options .fast' end RSpec::Core::RakeTask.new(:slow) do |t| t.rspec_opts = '--options .slow' end end
Or ..
namespace :spec do desc "runs the fast specs" do RSpec::Core::RakeTask.new(:fast) do |t| t.rspec_opts = '--tag ~slow' end RSpec::Core::RakeTask.new(:slow) do |t| t.rspec_opts = '--tag slow' end end
Implicit true value for tags/filters
This is not new in rspec-2.8, but all the tags/filters in the example above can
be written without explicitly typing true:
--tag slow --tag ~slow
RSpec.configure {|c| c.filter_run_excluding :slow} it "does something", :slow do
You have to set a config option to enable this in rspec-2.x:
RSpec.configure {|c| c.treat_symbols_as_metadata_keys_with_true_values = true}
In rspec-3.0, this will be the default, but without setting this value in 2.x you’ll get a deprecation warning when you try to configure things this way. It’s ugly, I know, but this enabled us to introduce the new behavior without breaking compatibility with some suites in a minor release.
Ordering
With 2.8, you can now run the examples in random order, using the new --order
option:
--order rand
The order is randomized with some reasonable caveats:
- top level example groups are randomized
- nested groups are randomized within their parent group
- examples are randomized within their group
This provides a very useful level of randomization while maintaining the
integrity of before/after hooks, subject, let, etc.
If you want to run the examples in the default ordering (file-system load order for files and declaration order for groups/examples), you can override the order from the command line:
--order default
Pseudo-randomization
The randomization is managed by Ruby’s pseudo-randomization. This means that if you find an order dependency and want to debug/fix it, you can fix the order by providing the same seed for each run:
--order rand:1234
The seed is printed to the console with each run, so you can just copy it to the
command. You can also just specify the seed, which RSpec will assume means you want
to run with --order rand:
--seed 1234
Every time you run the suite with the same seed, the examples will run in the same “random” order.
Built-in matchers are all classes in rspec-expectations
The Matcher DSL in rspec-expectations makes it dead simple to define custom matchers that suit your domain. The problem is that it is several times slower than defining a class to do so. While this doesn’t make much difference when you have a custom matcher that you use a few dozen times (where talking hundredths of seconds here), it does make a difference if every single matcher invocation in your entire suite suffers this problem.
The short term fix is that all of the built-in matchers have been re-implemented as classes rather than using the DSL to declare them. This has the added benefit of making it easier to navigate the code and RDoc
Longer term, we’ll try to refactor the internals of the matcher DSL so that it generates a class at declaration time. Eventually.
Summing up
So that’s it. Nothing ground breaking. Nothing compatibility breaking. But some nice new features and improvements that will make your life just a little bit nicer when you upgrade. We’re doing a release candidate because enough changed internally that I want to give you time to try it out, so please, please do so! And please report any issues you’re having with this upgrade to:
Assuming there are no significant issues, I’ll release 2.8 final within a week or two.
Happy spec’ing!
David
more »
rspec-core 2.7.1 is released! »
Created at: 20.10.2011 15:13, source: David Chelimsky, tagged: bdd rspec ruby
rspec-core-2.7.1
- Bug fixes
- tell autotest the correct place to find the rspec executable
more »
