2010-04-05 8 views
4

Je crée une gemme qui va générer un contrôleur pour l'application Rails qui l'utilisera. Cela a été un processus d'essais et d'erreurs pour moi quand j'essayais de tester un contrôleur. Lors du test des modèles, cela a été plutôt facile, mais lors du test des contrôleurs, ActionController :: TestUnit n'est pas inclus (comme décrit here). J'ai essayé de l'exiger, et tous les trucs similaires dans Rails mais cela n'a pas fonctionné.Test (avec RSpec) d'un contrôleur en dehors d'un environnement Rails

De quoi aurais-je besoin dans spec_helper pour que le test fonctionne?

Merci!

+0

J'ai soulevé cette question dans rspec-utilisateurs liste de diffusion, et Aslak Hellesy dit que généralement, si vous testez une chose Rails, il est plus facile de compiler la pierre précieuse, l'utiliser dans une application Rails et écrivez ces tests dans l'application Rails. Bien que cela semble définitivement plus facile, on dirait que c'est très brisé. Ça le rendra cassant quand je mettrai cette gemme dehors dans la nature. –

+0

Depuis lors, j'ai choisi d'utiliser l'approche de l'application 'dummy'. Voir http://whilefalse.net/2012/01/25/testing-rails-engines-rspec/ –

Répondre

2

Voici un exemple de test Test :: Unit autonome fonctionnant avec un simple contrôleur sous test inclus. Peut-être y a-t-il ici des parties que vous devez transférer sur votre code rspec.

require 'rubygems' 
require 'test/unit' 
require 'active_support' 
require 'active_support/test_case' 
require 'action_controller' 
require 'action_controller/test_process' 

class UnderTestController < ActionController::Base 
    def index 
    render :text => 'OK' 
    end 
end 
ActionController::Routing::Routes.draw {|map| map.resources :under_test } 

class MyTest < ActionController::TestCase 
    def setup 
    @controller = UnderTestController.new 
    @request = ActionController::TestRequest.new 
    @response = ActionController::TestResponse.new 
    end 

    test "should succeed" do 
    get :index 
    assert_response :success 
    end 
end 
+0

Merci, je vais essayer plus tard aujourd'hui et afficher comment ça se passe. –

+0

Il semble que la différence fondamentale est que je ne pense pas que vous puissiez faire de votre classe de test une sous-classe de ActionController :: TestCase dans rspec. Dans rspec, je crois que c'est automatiquement déduit en fonction du bloc describe. par exemple. describe SampleController, "sur l'index GET" recherchera le SampleController dans les applications/contrôleurs. J'espère que j'ai tort et cela peut être annulé! –

Questions connexes