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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top