Использование Rails 3.0.5, RSpec 2 и Capybara 0.4.1.2, и я пытаюсь написать спецификацию контроллера для своего нового сеанса SessionController #.Rspec и Capybara соответствует объекту
it "assigns the empty session to a variable" do
get :new
assigns(:session).should == ActiveRecord::Base::Session.new
end
Я использую ActiveRecord :: Base пространство имена, как это, кажется, вступает в противоречие с классом Капибара 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)>'
Любые подсказки?
Спасибо, это работает. Из любопытства ... изменилось бы, если я буду использовать 'be_an' или' be_an_instance_of' здесь? – Cimm
Ах да. 'be_an' проверяет' kind_of? 'и' be_an_instance_of' проверяет 'instance_of?'. Таким образом be_an также будет истинным для каждого экземпляра любого класса, который наследуется от AR :: Base :: Session. Дополнительная информация: http://stackoverflow.com/questions/3893278/ruby-kind-of-vs-instance-of-vs-is-a – Dogbert
Прохладный, спасибо за ответ! – Cimm