假设我们有这样一段代码:
def index
@posts = Post.where(:status => ACTIVE)
if params[:s]
@posts = Post.where("title like ?", "%#{params[:s]}%").order("title asc")
else
@posts = Post.limit(20).order("date desc")
end
end
在指定此操作时,我们可以为每个示例编写一个 stub 链,但如果我们想专注于其他地方,这种方式会限制我们很多。
当您不知道顺序或将调用多少方法时,为 RSpec stub 复杂 Arel 查询的最佳方法是什么?
注意:我正在查看 Stubbing Chained Queries in Rails 3 and Rspec我想我想要的是 stub_chain_with_indifferent_order(:where, :order, :limit)
。
最佳答案
这可能是告诉您您在错误级别执行此操作的代码。我非常喜欢 RSpec 的 MOCK ALL THE THINGS(!!) 理念:如果它变得难以模拟,也许你的设计是错误的。
例如,我可能会将您的代码重构为:
def index
@posts = Post.posts_for(:like => params[:s], :order => (params[:s] ? "title asc" : "date desc")
end
(或者根据您的域稍微好一点。)
然后您可以模拟 Posts.posts_for
,这是一个简单的方法调用,而不是尝试模拟大量 AR 链式方法。
关于ruby-on-rails-3 - 复杂的 Arel 查询和 RSpec stub ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6899497/