2010-04-23 2 views
4

Dans les spécifications de mon contrôleur, je bloque la validation? pour certains tests de routage, (basé sur Ryan Bates nifty_scaffold) comme suit: -Existe-t-il un moyen de défaire le moka stubbing de any_instance?

it "create action should render new template when model is invalid" do 
    Company.any_instance.stubs(:valid?).returns(false) 
    post :create 
    response.should render_template(:new) 
end 

Ceci est bien quand je teste les contrôleurs en vase clos. J'ai également ce qui suit dans mon modèle de spécification

it "is valid with valid attributes" do 
    @company.should be_valid 
end 

Encore une fois cela fonctionne bien lorsqu'il est testé en isolement. Le problème vient si je cours spec pour les deux modèles et contrôleurs. Le test du modèle échoue toujours comme valide? méthode a été écrasée. Y a-t-il un moyen pour moi de supprimer le stubbing de any_instance lorsque le test du contrôleur est détruit. J'ai contourné le problème en exécutant les tests dans l'ordre alphabétique inverse pour m'assurer que les tests du modèle s'exécutent avant les contrôleurs mais je n'aime vraiment pas que mes tests dépendent de la séquence.

Répondre

4

Vous devez configurer manuellement RSpec. De plus, n'oubliez pas que Rspec fournit ses propres méthodes pour simuler un objet. Utilisez l'API RSpec ou vous ne pourrez pas bénéficier de l'abstraction de bibliothèque. http://rspec.info/documentation/mocks/message_expectations.html

+0

Bien que la solution soit correcte, l'explication ne l'est pas. Moka ne détecte pas RSpec, mais lorsque la configuration RSpec est définie comme décrit, RSpec invoque Moka aux points appropriés. –

+0

Mise à jour du commentaire. Merci @floehopper –

1

Est-ce que votre spec_helper contient

Spec::Runner.configure do |config| 
    config.mock_with :mocha 
end 

Avec cette rspec devrait abattre simulacres entre les tests.

3

Je vais avoir le même problème, mais ne pas utiliser Rspec mais Test::Unit normale, en fait ActionController::TestCase.

Les attentes définies restent vivantes parmi les tests.

Y at-il une idée comment puis-je réinitialiser mes attentes entre les tests?

  • Ruby: 1.9.2
  • Rails: 3.0.3
  • Mocha: 0.9.10

Mise à jour: J'ai résolu ce avec la méthode Mocha unstub: http://mocha.rubyforge.org/classes/Mocha/ObjectMethods.html#M000009

Questions connexes