2013-08-08 12 views
6

Denetleyicideki bazı şeyleri değiştirmek ve rspec kullanarak test etmek istiyorum. Spree::ProductsController için new eylemi oluşturmak istiyorum. Bu kimse daha sonra bana doğru yönde dürtme büyük ediyorum ben Spree denetleyici dekoratörüne nasıl test yazılır?

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 

Ama onun asıl Spree::Controller kullanılarak denenmiş ve

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

verir ettik budur.

cevap

6

deneyin şeklinde değiştirerek

describe Spree::ProductsControllerDecorator do 

den

describe Spree::ProductsController do 

RSpec sınıfı tarif edilmesini bir sürü şey algılar için açıklar. Ayrıca RSpec dosyasına aşağıdaki eklemek isteyeceksiniz:

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

Bu el Spree yolları dahil etmek RSpec rotaları ayarlayacaktır. Spree/products_controller # new uygulamasının rotanız uygulamanızda tanımlanmadığından (ancak bunun yerine Spree'de), rotalarınızı bu şekilde manuel olarak geçersiz kılmanız gerekir.

+0

Üzgünüz zaten 'Spree :: ProductsController' yapıldı, düzeltildi, ancak hata devam ediyor – benchwarmer

+0

Yanıtı kullanabileceğiniz ek bir adımla düzenledim. Rspec ile dekoratörleri test etmek için bunu birkaç Spree uygulamasında kullanırız. – gmacdougall

+0

Önerilen güzergahlar eklendi .. yine de – benchwarmer

0

spec_helper.rb içinde, sen

RSpec.configure do |config| 

blokta

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

ekleyin ve ardından

require 'spree/core/testing_support/controller_requests' 

eklemek ait

açıklama ve nezaket gerekir http://rohanmitchell.com/2012/06/writing-controller-tests-for-spree-controllers/

+0

ayrıca bunu rails_helper.rb dosyasına da koyabilirsiniz –