gpt4 book ai didi

ruby-on-rails-3 - 如何使用 RSpec 测试在 Rails 中具有过滤器的搜索 Controller 操作?

转载 作者:行者123 更新时间:2023-12-01 05:38:13 25 4
gpt4 key购买 nike

我们在 Rails 应用程序中几乎所有基于表格的 View 中都有一个带有过滤器的栏,我们需要测试 Controller 操作。

代码示例:

def index
@users = User.
with_status(params[:status]).
with_role(params[:role_id]).
search(params[:q])
end

上述方法是 ActiveRecord 范围,如果传递的值为空,则设置为绕过这些范围。

我现在需要做的是理智地规范它并测试所有 esge 案例:
  • 没有参数通过
  • 只有角色,只有状态,只有搜索
  • 角色 + 状态、角色 + 搜索、...(2 对)
  • 角色+状态+搜索

  • 我编写的基本规范示例如下:
    context "when filtering by status" do
    before do
    1.times { Factory(:user, :status => "one") }
    3.times { Factory(:user, :status => "other") }
    end

    it "returns only users with the provided :status" do
    get :index, :status => "one"

    assigns(:users).size.should == 1
    assigns(:users)[0].status.should == "one"
    end
    end

    我想编写一个矩阵来混合和匹配角色、状态和搜索参数,并生成适当的规范示例。

    Array#permutation 是解决方案还是有更好的方法?

    最佳答案

    我会测试模型中的范围,因此请确保它们可以正确处理空白值,并正确处理设置值。

    然后在 Controller 内部,我将测试调用链的期望(使用 stub_chain )。链将返回正确结果的事实是通过每个范围单独具有正确行为(您测试过)这一事实来处理的,并且组合行为由 rails/activerecord 确保。您应该测试传递的参数是否正确处理。

    您为测试矩阵而构建的代码非常令人印象深刻。但对我来说,我试图确保我的测试是可读的,我认为它们是一段代码应该做什么的文档。对我来说,您的代码乍一看难以理解。

    希望这可以帮助。

    关于ruby-on-rails-3 - 如何使用 RSpec 测试在 Rails 中具有过滤器的搜索 Controller 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445717/

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