我已经浏览了google和stackoverflow以查找我的问题,并找到了一些类似的问题,但没有一个可以解决我的问题。
在我的应用中,用户has_one个人资料和个人资料belongs_to用户。
我正在尝试测试一些用户功能,我需要创建一个与我的测试用户相关联的测试配置文件才能正确执行此操作。
这是我的工厂/ user_factory.rb
FactoryGirl.define do
factory :user do
email {Faker::Internet.safe_email}
password "password"
password_confirmation "password"
end
end
这是我的工厂/ profile_factory.rb
FactoryGirl.define do
factory :profile do
phone Faker::PhoneNumber.phone_number
college Faker::University.name
hometown Faker::Address.city
current_location Faker::Address.city
about "This is an about me"
words_to_live_by "These are words to live by"
first_name {Faker::Name.name}
last_name {Faker::Name.name}
gender ["male", "female"].sample
user
end
end
以下是我需要创建关联配置文件的功能/ users_spec.rb:
require 'rails_helper'
feature "User accounts" do
before do
visit root_path
end
let(:user) {create(:user)}
let(:profile) {create(:profile, user: user)}
scenario "create a new user" do
fill_in "firstName", with: "First"
fill_in "lastName", with: "Last"
fill_in "signup-email", with: "email@email.com"
fill_in "signup-password", with: "superpassword"
fill_in "signup-password-confirm", with: "superpassword"
#skip birthday=>fill_in "birthday", with:
#skip gender
expect{ click_button "Sign Up!"}.to change(User, :count).by(1)
end
scenario "sign in an existing user" do
sign_in(user)
expect(page).to have_content "Signed in successfully"
end
scenario "a user that is not signed in can not view anything besides the homepage" do
end
end #user accounts
现有用户中的方案签到我需要关联的个人资料。
现在我只是使用工厂创建个人资料
let(:profile) {create(:profile, user: user)}
我尝试传递create block以关联配置文件,我尝试重写配置文件的user_id属性以将其与创建的用户关联,但两者都没有工作。理想情况下,我想设置它,以便无论何时创建用户,都会为其创建关联的配置文件。有什么想法吗?
我知道这不会太难我只是无法提出解决方案。谢谢你的帮助。
答案 0 :(得分:1)
最简单的方法是让工厂与协会同名。在您的情况下,如果关联是配置文件,您可以隐式创建关联的配置文件记录以及用户记录。只需使用相关工厂的名称,就像这样。
factory :user do
...
profile
end
如果您需要更多控制权,那么Factory Girl的关联就是您所需要的。您可以覆盖属性并从关联名称中选择不同的工厂名称。此处,关联名称为 prof ,工厂为 profile 。 lastName 字段被覆盖。
factory :user do
...
association :prof, factory: :profile, lastName: "Johnson"
end
您可以在Factory Girl的Getting Started找到更多信息。