2013-08-08 28 views
6

Mi piacerebbe modificare alcune cose nel controller e testarle usando rspec. Voglio creare l'azione new per Spree::ProductsController. Questo è quello che ho provatoCome scrivere test per decoratore spree controller?

routes.rb 

resources :products 

prodcuts_controller_decorator.rb 

Spree::ProductsController.class_eval do 
    before_filter :authenticate_spree_user!, :except => [:show, :index] 


    def new 
    @product = current_user.products.build 
    end 

end 

products_controller_spec.rb 

require 'spec_helper' 
describe Spree::ProductsController do 
    let(:user) {create(:user)} 

    before(:each) do 
     Spree::Core::Engine.routes 
     BigPlanet::Application.routes 
     controller.stub :spree_current_user => user 
    end 

    it "render new template" do 
     get :new 
     response.should render_template(:new) 
    end 

    end 
end 

Ma il suo utilizzo originale Spree::Controller e dà

Failure/Error: get :new 
ActionController::RoutingError: 
No route matches {:controller=>"spree/products", :action=>"new"} 

Se qualcuno mi può spingere nella giusta direzione, allora sarebbe fantastico.

risposta

6

prova a modificare le descrivere da

describe Spree::ProductsControllerDecorator do 

a

describe Spree::ProductsController do 

RSpec deduce un sacco di roba dalla classe che viene descritto. Si potrà anche aggiungere il seguente al file RSpec:

before(:each) { @routes = Spree::Core::Engine.routes } 

Ciò impostare manualmente i percorsi in RSpec per includere i percorsi Spree. Dal momento che il percorso per spree/products_controller # new non è definito nella tua applicazione (ma in Spree invece) dovrai sovrascrivere manualmente i tuoi percorsi come questo.

+0

Spiacente che fosse già 'Spree :: ProductsController', corretto, ma l'errore persiste – benchwarmer

+0

Ho modificato la risposta con un ulteriore passaggio che è possibile utilizzare. Lo usiamo in diverse applicazioni Spree per testare i decoratori con rspec. – gmacdougall

+0

Aggiunti i percorsi come suggerito .. ancora non identifica i percorsi – benchwarmer

0

in spec_helper.rb, è necessario aggiungere

require 'spree/core/testing_support/controller_requests' 

quindi, aggiungere

config.include Spree::Core::TestingSupport::ControllerRequests, :type => :controller 
config.include Devise::TestHelpers, :type => :controller 

nel blocco

RSpec.configure do |config| 

spiegazione e per gentile concessione di http://rohanmitchell.com/2012/06/writing-controller-tests-for-spree-controllers/

+0

puoi anche inserirlo nel file rails_helper.rb –