Rspec2+Factory girl, how to test a change?

Hi, I’m new on tests but trying to test the following method, but it
gives me an error message about “nil is not a symbol”.

job.rb

==
def publish(url)
update_attributes(:available => true, :locked => false)
tweet(url)
end

job_spec.rb

===
it “should publish a job” do
@job = Factory(:job, :available => false)
lambda { @job.publish }.should
change(@job.available).from(false).to(true)
end

error

==

  1. Job Job publish should publish a job
    Failure/Error: lambda { @job.publish }.should
    change(@job.available).from(false).to(true)
    nil is not a symbol

    ./spec/models/job_spec.rb:128:in `block (3 levels) in <top

(required)>’

Finished in 1.12 seconds
47 examples, 1 failure, 4 pending

any idea?

How does your factory declaration look like?

In this block:
lambda { @job.publish }.should
change(@job.available).from(false).to(true)
end

try putting the arguments to the change method in curly braces:

lambda { @job.publish }.should
change{@job.available}.from(false).to(true)
end

If you pass the method parameters, which is what it expects with
parantheses, it expects two arguments, the second of which would be
the method name in the form of a symbol, which I think explains the
‘nil is not a symbol’ error you’re getting.

By the way, if you’re upgrading RSpec1 to RSpec2, there’s a cheat
sheet of changes here: