使用Mongoid和rspec测试named_scope

时间:2011-10-31 13:26:49

标签: ruby-on-rails ruby-on-rails-3 rspec factory-bot

我是RoR的新手,我正在尝试为我的模型测试一个简单的named_scope。

但我不知道我的模型中是否存在问题(我使用的是mongoid),在我的代码测试中(我使用的是rspec)或者在我的工厂中。我收到了这个错误

  

Mongoid ::错误:: InvalidCollection:          不允许访问Movement的集合,因为它是嵌入式文档,请从根目录访问集合   文档。

我的模特

class Movement
    include Mongoid::Document
    field :description, :type => String
    embedded_in :category

    named_scope :top, lambda { |number| { :limit => (number.size > 0 ? number : 10) } }    
end

class Category
  include Mongoid::Document
  field :name
  embeds_many :movement
end

我的工厂,con factory_girl

Factory.define :movement do |m|
  m.amount 24
  m.date "30/10/2011"
  m.description "Beer"
  m.association :category, :factory => :category
end

Factory.define :category do |c|
  c.name "Drink"
end

我的测试

describe "when i have a movement list" do
  it "recent method should return last 2 movements" do
    @movements = (1..3).collect { Factory(:movement) }
    recent_movements = Movement.top(2)
    recent_movements.should have(2).entries
  end
end

错误:

  

Mongoid ::错误:: InvalidCollection:         不允许访问Movement的集合,因为它是一个嵌入的>文档,   请从根文档中访问一个集合。

我在工厂做了一点改变。

   Factory.define :movement do |m|
      m.amount 24
      m.date "30/10/2011"
      m.description "Beer" 
      m.category { [ Factory.build(:category) ] }
    end

但后来我又遇到了其他错误:

  

失败/错误:@movements =(1..3).collect {工厂(:运动)}       NoMethodError:         #

的未定义方法`reflect_on_association'

有人可以帮助我吗?

由于

1 个答案:

答案 0 :(得分:0)

我的应用中遇到了同样的错误。我最后在课堂上出错,这解决了我的问题。