很长时间的读者,但第一次在这里的海报SO :)
在过去的几天里,我一直在设置FactoryGirl.
昨天我更换了一些工厂(主要是我的用户和品牌工厂)
Language.find_or_create_by_code('en')
Run Code Online (Sandbox Code Playgroud)
附:
Language.find_by_code('en') || create(:language)
Run Code Online (Sandbox Code Playgroud)
因为第一个选项创建一个只填充了代码属性的Language对象; 而第二个使用语言工厂来创建对象(从而填充工厂中指定的所有属性)
现在,当我运行我的测试时,它立即在Factory.lint上失败,说明我的用户(和admin_user)工厂无效.恢复上面的代码并不能解决这个问题,并且提供的堆栈跟踪FactoryGirl.lint非常无用.
当我评论lint函数时,我的测试实际运行正常,没有任何问题.
当我在rails控制台中手动创建工厂并使用.valid?它时,它返回true,所以我不知道为什么lint认为我的工厂无效.
我的用户工厂看起来像这样:
FactoryGirl.define do
factory :user do
ignore do
lang { Language.find_by_code('en') || create(:language) }
end
login "test_user"
email "test_user@test.com"
name "Jan"
password "test1234"
password_confirmation "test1234"
role # belongs_to :role
brand # belongs_to :brand
person # belongs_to :person
language { lang } # belongs_to :language
factory :admin_user do
association :role, factory: :admin
end
end
end
Run Code Online (Sandbox Code Playgroud)
这里的作用,个人 …