Comparing new models

Hi all,

I am trying to test that a view file in Rails is being sent a new
empty model (Product.new) in my rspec test, below is my code. I’ve
tried comparing them with ==, ===, equal, eql none work. I just get an
error (see below code). I guess it’s the condition tester (e.g. ==)
that is incorrect, can anyone help?

Code:

it “should assign the new product for the view” do
do_get
assigns[:product].should == Product.new
end

Error:

‘ProductsController handling GET /products/new should assign the new
product for the view’ FAILED
expected: #<Product id: nil, name: nil, permalink: nil, description:
nil, price: nil, is_enabled: nil, created_at: nil, updated_at: nil,
manufacturer_id: nil>,
got: #<Product id: nil, name: nil, permalink: nil, description:
nil, price: nil, is_enabled: nil, created_at: nil, updated_at: nil,
manufacturer_id: nil> (using ==)
./spec/controllers/products_controller_spec.rb:118:

On Sun, Apr 6, 2008 at 4:33 PM, Rare [email protected] wrote:

it “should assign the new product for the view” do
do_get
assigns[:product].should == Product.new
end

Try this in irb:

Product.new == Product.new
=> false

This is why what you have is failing. What will work is something like
this:

it “should assign the new product for the view” do
product = Object.new
Product.should_receive(:new).and_return(product)
do_get
assigns[:product].should equal(product)
end

You can use product = Product.new for the first line, but I’m pretty
sure Object.new is cheaper.

HTH,
David