2011-08-24 2 views
0

J'essaie de tester un contrôleur avec RSpec mais j'ai un problème car une fonction dans le contrôleur nécessite une base de données.exécuter la base de données avec rspec-rails

la ligne de code dans le contrôleur ressemble à quelque chose comme:

@myallresources = Myrsources.all 

où MyResources hérite seulement de ActiveRecord :: Base

cependant, parce qu'il n'y a aucune base de données, il n'y a rien à charger et @ myallresources est juste un tableau vide, provoquant l'échec du test. Y at-il un moyen de se connecter à une base de données lors de l'exécution de la rspec?

Je suis très nouveau à RSpec et rails si toute aide serait très appréciée. Merci.

Répondre

0

Vous ne devez pas utiliser une connexion de base de données dans les spécifications de votre contrôleur.

Vérifiez la section sur l'isolation de base de données sur cette page http://rspec.info/rails/writing/controllers.html

Fondamentalement, vous devez railler ou stub vos modèles ActiveRecord, comme ceux-ci devraient être testés séparément dans les spécifications des modèles. Voici un exemple simple en utilisant mock_model:

before do 
    mocks = (1..3).map { mock_model(MyResource) } 
    MyResource.should_receive(:all).and_return(mocks) 
end 

Mettre cela à l'intérieur du même bloc où réside l'essai de définition describe pour les actions qui utilisent MyResource.all.

Vous pouvez trouver une bonne explication des simulacres et des talons dans les liens suivants:

Questions connexes