gpt4 book ai didi

ruby-on-rails - 如何编写模型规范来测试 PgSearch text_search 查询方法(Rspec、Rails、Postgres)

转载 作者:行者123 更新时间:2023-11-29 11:52:05 25 4
gpt4 key购买 nike

我正在尝试在我的模型规范中编写几个测试,以测试无论是否传入查询,以下方法的逻辑都有效。

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

最佳答案

好吧,当您说要测试方法是否“有效”(无论是否提供查询)时,您首先需要确定“有效”是什么意思。

如果你想做一个实际的搜索并检查结果,那么你不需要任何测试替身,但你需要传入一个真正的查询以供 search 使用,它会显然,检查结果是否完全符合您的预期更有效,而不是仅仅不是 nil

如果你想检查 searchscoped 是否被正确调用,你可以传入一个 query 的 stub 并设置对 searchscoped 的期望(例如,它们被调用以及使用什么参数)。您还可以为每个提供一个返回值,并检查该方法是否返回该值。

您现在采用了一种混合方法,至少对于第一个示例而言是这样。您需要决定采取什么方向。

希望对您有所帮助。如果您在做出上述决定并查阅文档后需要帮助来构建实际代码,请随时在评论中提出后续问题。

关于ruby-on-rails - 如何编写模型规范来测试 PgSearch text_search 查询方法(Rspec、Rails、Postgres),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19123201/

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