Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

shoulda-matchers RSpec expect syntax

Tags:

rspec

shoulda

What is the correct format for using shoulda-matchers and RSpec's new expect syntax?

like image 337
trev9065 Avatar asked Sep 08 '13 03:09

trev9065


1 Answers

While one could certainly use the shoulda-matchers with the new expect syntax as follows:

it 'should validate presence of :email' do   expect(subject).to validate_presence_of :email end 

or the more concise but less readable:

it { expect(subject).to validate_presence_of :email } 

the one-liner should format these matchers are typically used with is explicitly supported in 2.14 even when config.syntax == :expect. When should is being used with an implicit subject as in:

describe User   it { should validate_presence_of :email } end 

it does not rely on the monkey patching of Kernel that should otherwise depends on.

This is covered in https://github.com/rspec/rspec-expectations/blob/master/Should.md. In fact, that documentation even uses the above shoulda matcher example to illustrate this exception.

See also Using implicit `subject` with `expect` in RSpec-2.11, which discusses a configuration option which lets you use as an alternative to it.

expect_it { to validate_presence_of :email } 

Update: As of RSpec 3.0 (beta2), you will also be able to use:

it { is_expected.to validate_presence_of :email } 
like image 196
Peter Alfvin Avatar answered Sep 24 '22 02:09

Peter Alfvin