我正在使用MongoMapper而不是ActiveRecord。
我有一个用户模型和一个任务模型。 在任务模型中,我有两个属性如下:
这两个属性都是用户引用。
以下是两种模型之间的关系:
User.rb
has_many :tasks, :as => :owner
Taks.rb
belongs_to :owner, :class_name => "User", :polymorphic => true
我使用RSpec编写测试: (@user之前声明)
it "should have many tasks" do
another_user = Factory.create(:user, :email => Faker::Internet.email)
task_1 = Factory.create(:task, :owner => another_user, :author => another_user)
task_2 = Factory.create(:task, :owner => another_user, :author => @user)
task_3 = Factory.create(:task, :owner => @user, :author => @user)
another_user.tasks.size.should == 2
end
以下是问题:
Failure/Error: another_user.tasks.size.should == 2
expected: 2
got: 3 (using ==)
然而,当我在rails控制台中执行相同操作时,我会得到很好的结果......
以下是工厂:
Factory.define :user do |u|
u.first_name 'Test User' #
u.username 'Test User' #
u.surname 'TheTest' #
u.email 'foo@foobar.com' #
u.password 'please' #
u.confirmed_at Time.now #
end
Factory.define :task do |u|
u.author nil #
u.owner nil #
u.subjects []
u.timeframe ""
u.initially_placed_at nil
u.label "Foo Task" #
u.description "A small task description"
u.done false
u.pinned false
u.confidentiality ""
end
答案 0 :(得分:0)
有几个答案:
1)您可能有一个在此规范之前运行的泄漏规范(这意味着在此之前使用id和类型'another_user'创建任务
2)也许有必要创建任务(尝试使用Factory.create(:task)而不仅仅是Factory(:task)
3)您可能想查看shoulda,它可以帮助您轻松地指定关联,例如:
它{should have_many(:posts)}
答案 1 :(得分:0)
这确实令人头疼。我看到一些选项可以帮助您找到这个:
使用Rubymine,您可以轻松调试测试
添加了很多日志语句
添加以下测试:
another_user.tasks.should =〜[task1,task2]
这会显示商品列表中的差异,而其他商品会显示为task3
吗?
除此之外:确实,结帐shoulda!