Ruby on rails 如何获取创建的FactoryGirl对象?
我有这些模型:Ruby on rails 如何获取创建的FactoryGirl对象?,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,我有这些模型: class User < ActiveRecord::Base has_many :company_users, :dependent => :delete_all class Company < ActiveRecord::Base has_many :company_users, :dependent => :delete_all has_many :users, :through => :company_users class
class User < ActiveRecord::Base
has_many :company_users, :dependent => :delete_all
class Company < ActiveRecord::Base
has_many :company_users, :dependent => :delete_all
has_many :users, :through => :company_users
class CompanyUser < ActiveRecord::Base
belongs_to :company
belongs_to :user
这是实际测试
feature 'user listing' do
background do
company_user = create_company_admin
end
scenario 'getting user list' do
visit '/companies'
page.has_content? company_user.user.name
end
end
直到他调用:company_user.user.name,这似乎不存在。在那里我得到了未定义的局部变量或方法“company\u user”
这是工厂:
factory :company_user, class: CompanyUser do
authorized true
trait :admin do
admin true
end
trait :not_admin do
admin false
end
trait :has_shopper do
association :user, factory: :shopper
end
trait :has_company do
association :company, factory: :company
end
end
编辑:
这是购物者的工厂(这是一种用户)
如何在测试中获取用户、公司和公司用户?在助手中创建一个
公司用户
。但是company\u user
属于user
,我看不到您正在创建一个用户(您称user=user。在创建company\u user
之后,首先是nil
)
我也没有看到你创建一家公司。首先使用工厂,然后使用公司,然后使用公司用户(引用用户)在助手中创建用户
然后,您可以使用user=user.first
、company=company.first
和company\u user=CompanyUser在测试中访问它们。首先在助手中创建一个company\u用户
。但是company\u user
属于user
,我看不到您正在创建一个用户(您称user=user。在创建company\u user
之后,首先是nil
)
我也没有看到你创建一家公司。首先使用工厂,然后使用公司,然后使用公司用户(引用用户)在助手中创建用户
然后,您可以使用user=user.first
、company=company.first
和company\u user=CompanyUser.first
在测试中访问它们,但用户似乎是被创建的,因为当我进入firefox时,我看到一个登录的用户和一个公司,它们都被显示并链接到用户,所以这是正确的。我编辑了这个问题,将购物者工厂(实际上是一个用户)也包括在内。我尝试在助手中创建用户,但随后收到一条错误消息,表明邮件地址已被使用(这也证实了我的想法,即该用户已与company_用户一起创建)。在场景下添加:user=user.first和company=company.first时,它起作用。这是个好习惯吗?如果我有不止一个用户或公司怎么办?我会说,好的做法是只创建您需要的模拟对象,以便易于引用。您可以使用Model.first
如果您只创建了一个,则在创建对象并在测试中引用该对象时,将电子邮件地址(如果是用户)传递给工厂。好的,那么您的用户是在购物者工厂中创建的,所以您不需要事先创建它(我假设您的公司工厂的工作原理相同)一旦你正确地引用了company\u user=CompanyUser.first
你就可以引用company=company\u user.company
和user=company\u user.user
但是用户似乎是被创建的,因为当我进入firefox时,我看到一个登录的用户和一个公司,这两个都被显示出来并链接到用户,所以这是正确的。我编辑了这个问题,将购物者工厂(实际上是一个用户)也包括在内。我尝试在助手中创建用户,但随后收到一条错误消息,表明邮件地址已被使用(这也证实了我的想法,即该用户已与company_用户一起创建)。在场景下添加:user=user.first和company=company.first时,它起作用。这是个好习惯吗?如果我有不止一个用户或公司怎么办?我会说,好的做法是只创建您需要的模拟对象,以便易于引用。您可以使用Model.first
如果您只创建了一个,则在创建对象并在测试中引用该对象时,将电子邮件地址(如果是用户)传递给工厂。好的,因此您的用户是在购物者工厂中创建的,因此只要您正确引用了company\u user=CompanyUser,您就不需要事先创建它(我假设您的公司工厂也可以这样做)。首先您可以引用company=company\u user.company
和user=company\u user.user
factory :company_user, class: CompanyUser do
authorized true
trait :admin do
admin true
end
trait :not_admin do
admin false
end
trait :has_shopper do
association :user, factory: :shopper
end
trait :has_company do
association :company, factory: :company
end
end
factory :shopper, class: User do
username "user"
email "mail@mai.co"
password "password1"
after(:create) do |u|
u.skip_confirmation!
u.save!
end
end