我在 Rails 4 应用程序中有以下内容:
FactoryGirl.define do
factory :todo_list do
after(:create) do |t|
create_list(:item, 3, todo_list: t)
end
factory :public_todo_list do
is_public true
end
end
factory :item do
sequence(:position) { |n| n }
name "This is item ##{:position}?"
todo_list
end
end
我的功能规范中有以下内容:
feature "TodoLists" do
let(:todo_list) { create(:public_todo_list) }
scenario "Something that requires accessing the first item" do
...
pending todo_list.items.first.name
...
end
end
但是,测试失败并出现以下情况:
Failure/Error: pending todo_list.items.first.name
NoMethodError:
undefined method `name' for nil:NilClass
由于 todo_list.items
是一个 ActiveRecord::Associations::CollectionProxy::ActiveRecord_Associations_CollectionProxy_Item
对象,因此 first
似乎应该返回第一个 Item
记录?我得到的是 nil
。 todo_list.items.count
返回 3
并且 test.log
显示正确创建的所有记录。我错过了什么?
最佳答案
在访问第一项之前尝试重新加载关联:
todo_list.items.reload
我认为需要reload
,因为todo_list
对象在创建时没有任何项目,并且我怀疑RSpec缓存了它。 items
在创建 todo_list
对象后创建。
关于ruby-on-rails - Association.first 在使用具有 has_many 关联的 FactoryGirl 工厂的 RSpec 功能规范中返回 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22520675/