2013-08-08 1 views
6

컨트롤러에서 몇 가지 사항을 수정하고 rspec을 사용하여 테스트하고 싶습니다. Spree::ProductsController에 대해 new 작업을 만들고 싶습니다. 이 사람이 다음 오른쪽 방향으로 날 밀어 수있는이 좋은 거라고하면 내가 만능 컨트롤러 데코레이터 테스트를 작성하는 방법은 무엇입니까?

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 

그러나 그것의 원래 Spree::Controller를 사용하여 시도하고

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

을 제공 한 것입니다.

답변

6

한번에 변경하여

describe Spree::ProductsControllerDecorator do 

에서

describe Spree::ProductsController do 

RSpec에 클래스 설명되는 물건을 많이 추론에 대해 설명합니다. 또한하여 RSpec에 파일에 다음을 추가 할 수 있습니다 :

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

이 수동으로 이어지고 경로를 포함 RSpec에의 경로를 설정합니다. spree/products_controller # new에 대한 경로는 애플리케이션에 정의되어 있지 않으므로 (Spree 대신) 수동으로이 경로를 무시해야합니다.

+0

죄송합니다. 이미 'Spree :: ProductsController'가 수정되었지만 오류가 지속됩니다. – benchwarmer

+0

사용할 수있는 추가 단계로 답변을 편집했습니다. 우리는 이것을 여러 Spree 어플리케이션에서 사용하여 rspec을 사용하여 데코레이터를 테스트합니다. – gmacdougall

+0

제안 된 경로를 추가했습니다. 여전히 경로를 식별하지 않습니다. – benchwarmer

0

spec_helper.rb에, 당신은

RSpec.configure do |config| 

블록에

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

를 추가, 다음

require 'spree/core/testing_support/controller_requests' 

를 추가 할 수의

설명과 예의가 필요합니다 http://rohanmitchell.com/2012/06/writing-controller-tests-for-spree-controllers/

+0

또한 이것을 rails_helper.rb 파일에 넣을 수 있습니다 –