En utilisant Rails 3.0.5, RSpec 2 et Capybara 0.4.1.2 et essayer d'écrire une spécification de contrôleur pour ma nouvelle action SessionsController #.Objets Rspec et Capybara correspondants
it "assigns the empty session to a variable" do
get :new
assigns(:session).should == ActiveRecord::Base::Session.new
end
J'utilise l'espace de noms ActiveRecord :: Base comme il semble entrer en conflit avec la classe Session Capybara quand je ne le fais pas.
Voici le SessionsController:
class SessionsController < ApplicationController
def new
@session = Session.new
end
end
RSpec ne semble pas comprendre ce sont les mêmes objets. Voici ce que mon test retourne:
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)>'
Des indices?
Merci, cela fonctionne. Par curiosité ... cela ferait-il une différence si j'utilisais 'be_an' ou' be_an_instance_of' ici? – Cimm
Ah oui. 'be_an' vérifie les chèques' kind_of? 'et' be_an_instance_of' pour 'instance_of?'. Donc, be_an sera également vrai pour chaque instance de n'importe quelle classe qui hérite de AR :: Base :: Session. Plus d'infos: http://stackoverflow.com/questions/3893278/ruby-kind-of-vs-instance-of-vs-is-a – Dogbert
Cool, merci pour la réponse! – Cimm