我正在尝试在我的模型规范测试中编写几个测试,无论是否传入查询,以下方法的逻辑都有效。
models/payment.rb
include PgSearch
pg_search_scope :search,
:against => [:id, :transaction_id],
:using => {:tsearch => {:prefix => true, :dictionary => "english"}},
:associated_against => {user: [:email, :name]}
def self.text_search(query)
if query.present?
search(query)
else
scoped
end
end
以下是我正在尝试编写的一种测试示例,但是在实现此目的的最佳方式上进行消隐。
/spec/models/payment_spec.rb
describe '#text_search' do
it "works when query is passed in" do
payments = Payment.text_search(stub(:query))
payments.should_not be_nil
# is this even a good test??
end
it "still works if nothing is passed in" do
payments = Payment.text_search(nil)
payments.should_not be_nil
# same here, does this spec test for anything helpful??
end
end
答案 0 :(得分:0)
嗯,当你说要测试方法是否“有效”时,首先需要确定“有效”是什么意思。
如果你想进行实际搜索并检查结果,那么你不需要任何测试双打,但你需要传递一个真正的search
查询来使用,它显然会更多有效地检查结果是否符合您的预期,而不是nil
。
如果您想检查是否正确调用了search
和scoped
,可以传入query
的存根,并设置search
和{{ {1}}(例如,他们被称为和有什么参数)。您还可以为每个提供返回值,并检查该方法是否返回该值。
你现在有一种混合方法,至少就第一个例子而言。你需要决定采取哪些方向。
希望有所帮助。如果您在决定上述内容并查阅文档后需要帮助构建实际代码,请随时在评论中提出后续问题。