我使用范围定义了以下User类:
class User
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Search
# SCOPES
scope :all_admins, where( role: :admin)
scope :recents, order_by(created_at: :desc)
scope :olders, order_by(created_at: :asc)
field :role, type: Symbol
end
如果我使用以下rspec测试:
describe 'scopes' do
let(:admin1) { Fabricate(:admin) }
let(:admin2) { Fabricate(:admin) }
describe 'recents' do
it 'should return the admins from most recent to older' do
User.all_admins.recents.should eq([admin1, admin2])
end
end
end
我收到以下失败消息:
got: #<Mongoid::Criteria
selector: {"role"=>:admin},
options: {:sort=>{"created_at"=>-1}},
class: User,
embedded: false>
那我怎么测试这个范围呢?
答案 0 :(得分:1)
Mongoid延迟加载,执行:
User.all_admins.recents.to_a.should eq([admin1, admin2])
附注:
你应该将范围创建为lambdas,它很快就会成为Rails4的标准
我在mongo中遇到了符号类型的问题(在迁移期间),我宁愿使用字符串
我非常确定您的测试会失败,因为您的对象不是在db中创建的(let
在被调用之前不会被评估,替换为let!
)