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

标签 ruby-on-rails postgresql rspec pg-search

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

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/

相关文章:

ruby-on-rails - RSpec:如何测试从 Controller 调用私有(private)辅助方法的辅助方法?

ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务?

ruby-on-rails - rails 3 中的部分形式需要不同的链接,具体取决于新建或编辑

sql - COUNT 的 PostgreSQL 值乘以一个数字

python - Heroku 上的进程间通信

ruby-on-rails - 在 Mac 上安装 do_postgres

mysql - 在 Ruby Rspec 中连接到 MySQL 数据库

html - 将 HTML 渲染到 Rails flash 消息中

database - 基于工作流的系统的数据库设计

postgresql - 为什么设计注册#create,:trackable doing an INSERT instead of UPDATE?