gpt4 book ai didi

ruby-on-rails - 如何测试 before_filter 与 Rails 中的 RSpec 是否正常工作

转载 作者:行者123 更新时间:2023-12-03 23:53:44 28 4
gpt4 key购买 nike

我有一个 check_user_access_control我的 ApplicationController 中的 before_filter 会在让他通过之前检查已登录用户的角色和权限。我正在尝试对其编写一些测试,但找不到好的方法。

对于简单的索引操作,我只需执行以下操作:

it "allows access to mod" do
login_as(Factory(:mod)) # this is a spec helper
get :index
response.code.should == "200"
end

它工作得很好。对于需要一些参数的编辑/显示/创建和其他操作,与数据库的交互以及运行后可能的重定向,它需要太多其他的东西来 stub 。

有没有办法测试在 before_filters 之后是否调用了特定操作? 我正在寻找类似 controller.should_receive(:action_name) 的东西(这不起作用)替换 response.code.should == "200"符合。

版本:rails 3.0.4 和 rspec 2.5

我尝试了另一种方法。我们在 ApplicationController 中有一个方法叫做 redirect_to_login我现在正在检查 controller.should_receive(:redirect_to_login)和作品。

虽然它可以正确检测用户是否被允许,但它会 stub 该方法,这意味着无论用户是否被允许,都会运行 Controller 操作。此外,操作取决于参数和数据库,我们不希望这样。

如果现在我用 controller.stub!(:action_name) stub 操作方法,该操作未运行但 RSpec 仍在寻找模板。好吧,有些 Action 没有模板,它们只是以 redirect_to :action => :somewhere_else 结尾。或 render :text => "foobar"在这一点上我们不关心。

总之,我现在需要的是找到一种方法来制作 RSpec 不是 担心模板的存在。

最佳答案

当 stub 时,您仍然可以给出一个虚拟实现。在该实现中,您可以引发一个错误,以确保所有执行都停止,或者您无论如何都要进行重定向。

例如。

controller.should_receive(:redirect_to_log) { redirect_to login_url }

要么
controller.should_receive(:redirect_to_log) { raise StandardError.new('login error') }
expect { get :index }.to raise_error

有关更多信息,请查看很棒的 rspec documentation .

希望能帮助到你。

关于ruby-on-rails - 如何测试 before_filter 与 Rails 中的 RSpec 是否正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881459/

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