Соответствие объектов Rspec и Capybara - PullRequest
2 голосов
/ 27 марта 2011

Используя Rails 3.0.5, RSpec 2 и Capybara 0.4.1.2, я пытаюсь написать спецификацию контроллера для моего действия SessionsController # new.

it "assigns the empty session to a variable" do
  get :new
  assigns(:session).should == ActiveRecord::Base::Session.new
end

Я использую пространство имен ActiveRecord :: Base, так как оно кажется конфликтующим с классом Capybara Session, когда я этого не делаю.

Вот SessionsController:

class SessionsController < ApplicationController
  def new
     @session = Session.new
  end
end

RSpec, похоже, не понимает, что это одни и те же объекты. Вот что возвращает мой тест:

 Failure/Error: assigns(:session).should == ActiveRecord::Base::Session.new
   expected: #<Session id: nil, session_id: nil, data: nil, created_at: nil, updated_at: nil>
        got: #<Session id: nil, session_id: nil, data: nil, created_at: nil, updated_at: nil> (using ==)
   Diff:
 # ./spec/controllers/sessions_controller_spec.rb:17:in `block (3 levels) in <top (required)>'

Любые намеки?

1 Ответ

3 голосов
/ 27 марта 2011

Проблема в том, что если вы сделаете

ActiveRecord::Base::Session.new == ActiveRecord::Base::Session.new

Вы получите ложь, так как оба этих объекта имеют отдельные object_id.

Попробуйте это:

assigns(:session).should be_an(ActiveRecord::Base::Session)
...