gpt4 book ai didi

ruby-on-rails - 在 Spree Controller Decorator 上测试重写操作

转载 作者:行者123 更新时间:2023-12-02 01:49:27 26 4
gpt4 key购买 nike

我在测试 Spree Controller 装饰器的覆盖操作时遇到问题,如下所示:

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 原始定义。

最佳答案

我尝试重现您上述提到的问题。我确实遇到了同样的问题。但是在我查看测试日志后,对我来说它在提示

过滤器链因 :ensure_checkout_allowed 呈现或重定向而停止

因为重写的 Controller 从未被执行过。它甚至在到达覆​​盖的方法之前就失败了。

这是我的规范文件的样子:规范/ Controller /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

这是我覆盖的 Controller 文件的样子:/app/controller/spree/checkout_controller_decorator.rb

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

您可能需要 stub 一些 before_filters 或编写一些代码以使 before_filters 通过

关于ruby-on-rails - 在 Spree Controller Decorator 上测试重写操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792736/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com