kal*_*lle 1 ruby testing ruby-on-rails factory-bot
我有一个简单的联想:
class Account < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
validates_presence_of :users
end
Run Code Online (Sandbox Code Playgroud)
和
class User < ActiveRecord::Base
belongs_to :account
end
Run Code Online (Sandbox Code Playgroud)
我只是想进行一个简单的测试:
describe 'a new', Account do
it 'should be valid' do
Factory.build(:account).should be_valid
end
end
Run Code Online (Sandbox Code Playgroud)
与工厂:
Factory.define :account do |a|
a.name { Faker::Company.name }
end
Factory.define :user do |u|
u.association :account
u.email { Faker::Internet.email }
end
Run Code Online (Sandbox Code Playgroud)
但我总是遇到这个错误:
'a new Account should be valid' FAILED
Expected #<Account id: nil, name: "Baumbach, Gerlach and Murray" > to be valid, but it was not
Errors: Users has to be present
Run Code Online (Sandbox Code Playgroud)
好吧,我设置正确的关联,但它不起作用......
谢谢你的帮助.
validates_presence_of :users在您的Account模型中负责测试失败.您的帐户中至少需要一个用户,因此可以创建该用户.
我不确定你真正想做什么,所以我给你两种方法来解决这个问题.第一个选择是改变你的工厂:
Factory.define :account do |a|
a.name { Faker::Company.name }
a.users {|u| [u.association(:user)]}
end
Factory.define :user do |u|
u.email { Faker::Internet.email }
end
Run Code Online (Sandbox Code Playgroud)
另一种方法是检查属于哪一方的关联的存在.所以你需要改变你的模型:
class Account < ActiveRecord::Base
has_many :users
accepts_nested_attributes_for :users
end
class User < ActiveRecord::Base
belongs_to :account
validates_presence_of :account
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4552 次 |
| 最近记录: |