[rspec-users] Can you explain this code to me?

Jarkko Laine jarkko at jlaine.net
Fri Feb 8 02:21:36 EST 2008

On 8.2.2008, at 1.26, Pito Salas wrote:

> I am experimenting with the restful-authentication plug in and I see
> that it has generated an rspec encantation which I had not seen
> before:
>  it 'allows signup' do
>    lambda do
>      create_user
>      response.should be_redirect
>    end.should change(User, :count).by(1)
>  end
> What does the combination of a lambda and a .should mean?

Lambda is an anonymous function, or pretty much the same as a block of  
code. So in the case above, running the code inside the lambda block  
should change the user count by one. This is the same as  
assert_difference does in test/unit.

> Similarly but a little different:
>  describe 'being created' do
>    before do
>      @user = nil
>      @creating_user = lambda do
>        @user = create_user
>        violated "#{@user.errors.full_messages.to_sentence}" if
> @user.new_record?
>      end
>    end
>    it 'increments User#count' do
>      @creating_user.should change(User, :count).by(1)
>    end
>  end
> Thanks for any pointers or clarifications!

Same thing, just this time the function is first stored in an instance  


Jarkko Laine

More information about the rspec-users mailing list