RSpec 测试数据库索引

Wil*_*ckl 3 rspec ruby-on-rails

有没有办法用 RSpec 测试数据库索引是否存在?

我正在使用friendly_id gem,但经常忘记为 slug 字段创建数据库索引。因此,我想将其包含在我的 RSpec 测试中。

Зел*_*ный 5

您可以使用index_exists?检查unique选项unique: true

=> ActiveRecord::Migration.index_exists?(:users, :user_id, unique: true)
=> -- index_exists?(:users, :user_id)
=>   -> 0.0559s
=> false
Run Code Online (Sandbox Code Playgroud)

或者:

=> ActiveRecord::Base.connection.index_exists?(:users, :user_id)
=> false
Run Code Online (Sandbox Code Playgroud)

based on should-matchers

=> ActiveRecord::Base.connection.indexes(:users).map(&:columns)
=> [["birthday"],
=> ["confirmation_token"],
=> ["email"],
=> ["facebook_id"],
=> ["reset_password_token"]]
Run Code Online (Sandbox Code Playgroud)

unique

=>ActiveRecord::Base.connection.indexes(:users).map { |x| Hash[:unique, x.unique, :column, x.columns ] }
=> [{:unique=>false, :column=>["birthday"]},
=> {:unique=>true, :column=>["confirmation_token"]},
=> {:unique=>true, :column=>["email"]},
=> {:unique=>true, :column=>["facebook_id"]},
=> {:unique=>true, :column=>["reset_password_token"]}]
Run Code Online (Sandbox Code Playgroud)