6

我想修改控制器中的一些东西并使用 rspec 测试它们。我想newSpree::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"}

如果有人能把我推向正确的方向,那就太好了。

4

2 回答 2

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 中),您必须像这样手动覆盖您的路由。

于 2013-08-08T22:35:28.493 回答
1

在 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/

于 2015-06-18T22:23:41.013 回答