2013-08-08 4 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 में मार्गों सेट हो जाएगा। चूंकि स्प्री/product_controller # नया मार्ग आपके एप्लिकेशन में परिभाषित नहीं है (लेकिन बदले में इसके बजाय) आपको इस तरह अपने मार्गों को मैन्युअल रूप से ओवरराइड करना होगा।

+0

क्षमा करें यह पहले से ही 'स्प्री :: उत्पाद नियंत्रक' था, ठीक है, लेकिन त्रुटि – benchwarmer

+0

बनी हुई है, मैंने उत्तर को एक अतिरिक्त चरण के साथ संपादित किया है जिसका आप उपयोग कर सकते हैं। हम rspec के साथ सजावटी परीक्षण करने के लिए कई स्प्री अनुप्रयोगों में इसका उपयोग करते हैं। – gmacdougall

+0

सुझाए गए मार्गों को जोड़ा गया .. फिर भी यह – benchwarmer

0

spec_helper.rb में, आप

require 'spree/core/testing_support/controller_requests' 

तो जोड़ने के लिए,

RSpec.configure do |config| 

ब्लॉक में जोड़ने

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

की आवश्यकता होगी

विवरण और के सौजन्य से http://rohanmitchell.com/2012/06/writing-controller-tests-for-spree-controllers/

+0

आप इसे rails_helper.rb फ़ाइल में भी डाल सकते हैं –

संबंधित मुद्दे