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

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs