Quelqu'un peut-il me décrire ce que RSpec 2 est en train de faire dans ce domaine?
-
30-09-2019 - |
Question
je tente de plonger dans RSpec 2, mais ses spécifications du contrôleur générées automatiquement ne fonctionnent pas pour toute version de RSpec 2 avec une version de Ruby ou toute autre version de Rails. Peut-être que je manque quelque chose évidente?
def mock_category(stubs={})
@mock_category ||= mock_model(Category, stubs).as_null_object
end
describe "GET show" do
it "assigns the requested category as @category" do
Category.stub(:find).with("37") { mock_category }
get :show, :id => "37"
assigns(:category).should be(mock_category)
end
end
Ceci est généré automatiquement à partir rails g scaffold Category
RSpec retourne ceci:
Failures:
1) CategoriesController GET show assigns the requested category as @category
Failure/Error: assigns(:category).should be(mock_category)
expected Category_1002, got nil
# ./spec/controllers/categories_controller_spec.rb:21
# /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/dependencies.rb:239:in `inject'
Pourquoi est-ce faux / stub retour nil
?
Mise à jour
est de la méthode show de mon contrôleur:
def show
@category = Category.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @category }
end
end
Merci!
La solution 2
RSpec a des conflits graves entre bêta Rails3 et RSpec 2 beta.10 à la libération Rails3 et RSpec 2 beta.20.
J'ai essayé copier et coller les différences entre les échafauds, mais j'éclairci la sitation entièrement en supprimant toutes les spécifications et les régénérer. Désinstallation haml
, et l'installation ne haml-rails
pour rails 3.
Toutes les spécifications fonctionnent maintenant.
Autres conseils
Hmm. Eh bien, si le mal de quelque chose, je vous ne le vois pas. Peut-être que l'action show
n'est pas atteint du tout? Y a-t-il des déclarations de before_filter
obtenir de la manière?
Vous pouvez essayer d'ajouter quelques tests pour voir si est atteint l'affectation. Comme
controller.should_receive(:show)
BTW .as_null_object
dit la maquette d'ignorer les messages que vous ne stub. Cela aide avec des objets qui dépendent de contraintes ou d'autres validations, que vous auriez autrement à bouchonner afin d'obtenir un objet que vous pouvez tester. Mais attention à ne pas ignorer les messages que vous devriez tester pour.