我想修改控制器中的一些东西并使用rspec测试它们。我想为new
创建Spree::ProductsController
操作。这就是我尝试过的事情
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"}
如果有人能把我推向正确的方向,那就太棒了。
答案 0 :(得分:6)
尝试从
更改您的描述describe Spree::ProductsControllerDecorator do
到
describe Spree::ProductsController do
RSpec从所描述的类中推断出很多东西。您还需要将以下内容添加到rspec文件中:
before(:each) { @routes = Spree::Core::Engine.routes }
这将手动设置RSpec中的路线以包括Spree路线。由于未在您的应用程序中定义spree / products_controller #new的路由(但在Spree中),您必须手动覆盖这样的路由。
答案 1 :(得分:0)
在spec_helper.rb中,您需要添加
require 'spree/core/testing_support/controller_requests'
然后,添加
config.include Spree::Core::TestingSupport::ControllerRequests, :type => :controller
config.include Devise::TestHelpers, :type => :controller
中的
RSpec.configure do |config|
块
对http://rohanmitchell.com/2012/06/writing-controller-tests-for-spree-controllers/
的解释和礼貌