How to write tests for spree controller decorator?
rspec, ruby-on-rails, spree
Solution
Try changing your describe from
describe Spree::ProductsControllerDecorator do
to
describe Spree::ProductsController do
RSpec infers a lot of stuff from the class being described. You'll also want to add the following to the rspec file:
before(:each) { @routes = Spree::Core::Engine.routes }
This will manually set the routes in RSpec to include the Spree routes. Since the route to spree/products_controller#new is not defined in your application (but in Spree instead) you'll have to manually override your routes like this.
Problem
I'd like to modify some things in the controller and test them using rspec. I want to create `new` action for `Spree::ProductsController`. This is what I've tried ``` 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 ``` But its using original `Spree::Controller` and gives ``` Failure/Error: get :new ActionController::RoutingError: No route matches {:controller=>"spree/products", :action=>"new"} ``` If anyone can shove me in the right direction then it'd great.