Ruby on rails 3 如何使用RSpec测试Rails中具有过滤器的搜索控制器操作?
在rails应用程序中,几乎所有基于表的视图中都有一个带有过滤器的栏,我们需要测试控制器的操作 代码示例如下:Ruby on rails 3 如何使用RSpec测试Rails中具有过滤器的搜索控制器操作?,ruby-on-rails-3,rspec2,Ruby On Rails 3,Rspec2,在rails应用程序中,几乎所有基于表的视图中都有一个带有过滤器的栏,我们需要测试控制器的操作 代码示例如下: def index @users = User. with_status(params[:status]). with_role(params[:role_id]). search(params[:q]) end 上述方法是ActiveRecord作用域,如果传递的值为空,则设置为绕过这些作用域 我现在需要做的是合理地规范它并测试所有esge案例: 没有
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
我想写一个矩阵,它将混合和匹配角色、状态和搜索参数,并生成适当的规范示例
<强>是数组排列的解决方案还是有更好的方法?<>强>
< p>我将测试模型中的作用域,确保它们能够正确处理空白值,并正确处理集合值。 然后在控制器内部,我将测试调用链的期望值(使用stub\u chain
)。链将返回正确的结果这一事实是由以下事实来处理的:每个作用域分别具有正确的行为(您已经测试过了),rails/activerecord确保了组合行为。您应该测试传递的参数是否正确处理
您为测试矩阵而构建的代码令人印象深刻。但对我来说,我试着确保我的测试是可读的,我认为它们是一种文档代码期望被做的文档。对我来说,你的代码一眼就看不懂
希望这能有所帮助。我会通过排列来完成,但我也有兴趣看看是否有人知道更好的方法。我只是通过排列来完成的,尽管我管理了一个很好的线/规格比率(60+规格大约10线),但我担心它的复杂性。这里是:谢谢分享。如果我找到更好的方法,我会把它寄回这里。