scopeのテストを書くときどのレベルまで書くか迷いますが、ひとまずこれだけは書いときたい一番簡単なテストの書き方のメモ
ActiveRecrod::QueryMethods
にはxxx_values
というattributeが用意されている。
これを利用する。
class Hoge < ActiveRecord::Base
scope :target, -> {
group(:kind, :flag).
order(created_at: :desc)
}
end
describe Hoge do
describe 'scopes' do
describe 'target' do
subject { Hoge.target }
its(:group_values) { should =~ [:kind, :flag] }
its(:order_values) { should =~ [{created_at: :desc}] }
end
end
end
まだ検証しきれていませんが、where_values
等の場合Arelが返されたりする。
class Hoge < ActiveRecord::Base
scope :fuga, -> (a) { where(a: a) }
end
Hoge.fuga(10).where_values #=> [#<Arel::Nodes::Equality:0x007ffbcb89e378 @left=#<struct Arel::Attributes::Attribute relation=#<Arel::Table:0x007ffbcb03bfa0 @name="hoges", @engine=Hoge(no database connection), @columns=nil, @aliases=[], @table_alias=nil, @primary_key=nil>, name="a">, @right=10>]