Как проверить назначение переменной экземпляра в новом действии мой контроллер с rspec?

Я новичок в тестировании, и у меня есть UsersController, который я хочу протестировать. Я начинаю с нового действия и пока имею следующее;

require 'spec_helper'

describe UsersController do

  describe "GET 'new'" do
    it "assigns a new User to @user" do
      user = User.new
      get :new
      assigns(:user).should eq(user)
    end
    it "renders the :new template"
  end

end

Пока что мой UsersController выглядит так

class UsersController < ApplicationController
  def new
    @user = User.new
  end
end

Я ожидал, что мой первый тест сработает, но когда я его запускаю, я получаю следующее;

Failures:

  1) UsersController GET 'new' assigns a new User to @user
     Failure/Error: assigns(:user).should eq(user)

       expected: #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
            got: #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>

       (compared using ==)

       Diff:#<User:0x007fe4bbfceed0>.==(#<User:0x007fe4bce5c290>) returned false even though the diff between #<User:0x007fe4bbfceed0> and #<User:0x007fe4bce5c290> is empty. Check the implementation of #<User:0x007fe4bbfceed0>.==.
     # ./spec/controllers/users_controller_spec.rb:9:in `block (3 levels) in <top (required)>'

Игра в консоли показывает следующее;

irb(main):001:0> a = User.new
=> #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
irb(main):002:0> b = User.new
=> #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
irb(main):003:0> a == b
=> false

Теперь мне интересно, почему 2 пустых объекта ActiveRecord не равны (в конце концов, Array.new == Array.newвозвращает true), и что мне нужно сделать, чтобы мой тест проходят.

6
задан brad 3 June 2012 в 22:44
поделиться