Тестирование переопределенного действия в Spree Controller Decorator

У меня возникли проблемы с тестированием переопределенного действия декоратора контроллера Spree, которое выглядит следующим образом:

app/controllers/spree/checkout_controller_decorator.rb

Spree::CheckoutController.class_eval do
  def update
     do_something
     redirect_to my_other_path
  end
end

Спецификация у меня такая:

spec/controllers/spree/checkout_controller_spec.rb

describe Spree::CheckoutController do
  routes { Spree::Core::Engine.routes }

  it "does something" do
    put :update
  end
end

но он никогда не попадает в мое определение обновления, он попадает в исходное определение Spree.


person user1502038    schedule 21.05.2014    source источник


Ответы (1)


Я попытался воспроизвести упомянутую выше проблему. Я столкнулся с той же проблемой. Но после того, как я заглянул в журналы испытаний, для меня это было жалобой

Filter chain halted as :ensure_checkout_allowed rendered or redirected

Из-за чего переопределенный контроллер так и не был выполнен. Это не удалось еще до того, как он достиг переопределенного метода.

Вот как выглядит мой файл спецификации: spec/controllers/checkout_controller_spec.rb

require "spec_helper"

describe Spree::CheckoutController do
  let(:order) {FactoryGirl.create(:spree_order)}

  before(:each) do
    @routes = Spree::Core::Engine.routes
    controller.stub :check_authorization => true
    controller.stub :ensure_checkout_allowed => true
    controller.stub :ensure_valid_state => true
    controller.stub :current_order => order
  end

  it "does something" do
    user = create(:spree_user)
    user.spree_roles.create(:name => "admin")
    sign_in(user)

    puts @routes.inspect
    spree_put :update, :order => {}
    assigns(:test_obj).should eql(1)
  end
end

Вот как выглядит мой переопределенный файл контроллера: /app/controller/spree/checkout_controller_decorator.rb

Spree::CheckoutController.class_eval do
  def update
    @test_obj = 1
    render :nothing => true
  end
end

Возможно, вам придется заглушить некоторые before_filters или написать некоторый код, чтобы сделать before_filters проходным.

person ernest    schedule 04.07.2014