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?
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
What does the combination of a lambda and a .should mean?
I’m new to the list, but I think I can answer that :).
From what I know, it means that RSpec will run the lambda’s code and
check that it had the effect specified in the “should” call.
And from that I can determine by looking at the two incantations you
posted, the lambda is used because the code can throw an error, and
the spec’s author didn’t want the first error to prevent the outer
“should” from being checked.
posted, the lambda is used because the code can throw an error, and
the spec’s author didn’t want the first error to prevent the outer
“should” from being checked.
Sometimes, but in this case, what you are trying to do is
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.
@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
variable.