Factory Girl - 在上面制作录音和通话功能
Factory Girl - Make record and call function on it
每当我创建一个用户时,我想对该用户调用 build_user_group。我在用户模型上使用 after_save:build_user_group 来执行此操作,但是当 FactoryGirl 创建用户时,永远不会执行 build_user_group。我如何从工厂内部调用它或确保 FactoryGirl 不会跳过回调?
# app/models/user.rb
class User < ActiveRecord::Base
belongs_to UserGroup
after_save :build_user_group
def build_user_group
if self.user_group_id.present?
self.user_group.update!(newest: self.name)
else
group = UserGroup.new(newest: self.name)
group.user << self
group.save!
end
end
end
-
# spec/factories.rb
FactoryGirl.define do
factory :user do
name "Default Name"
build_user_group #ArgumentError: Trait not registered: build_user_group
end
end
我没有按正确的方式调用 build_user_group。它认为我正在尝试访问具有该名称的特征。正确的称呼方式是什么?
理想情况下,build_user_group 将是一个私有函数,但如果这样更容易使用,也可以是 public。
您可以在 RSpec 测试中像这样模拟它:
context "...." do
it "...." do
user_group = double("user_group")
allow(user).to receive(:build_user_group).and_return(:user_group)
expect(....).to eq(....)
end
end
有关 RSpec 文档和示例,请参阅 here。
让我知道这是否适合你,或者如果你有任何其他问题!
您可以在 FactoryGirl 中使用回调来调用您的方法:
factory :product do
name "Default Name"
after(:build) do |p|
p.build_user_group
end
end
我认为当您使用工厂构建产品时不会调用该方法,因为您的 FactoryGirl strategy 是 :build
而不是 :create
(尽管您的问题是 'create').如果它在您创建产品时没有调用该方法,那么可能存在更深层次的问题,即为什么您的模型回调没有被调用。
每当我创建一个用户时,我想对该用户调用 build_user_group。我在用户模型上使用 after_save:build_user_group 来执行此操作,但是当 FactoryGirl 创建用户时,永远不会执行 build_user_group。我如何从工厂内部调用它或确保 FactoryGirl 不会跳过回调?
# app/models/user.rb
class User < ActiveRecord::Base
belongs_to UserGroup
after_save :build_user_group
def build_user_group
if self.user_group_id.present?
self.user_group.update!(newest: self.name)
else
group = UserGroup.new(newest: self.name)
group.user << self
group.save!
end
end
end
-
# spec/factories.rb
FactoryGirl.define do
factory :user do
name "Default Name"
build_user_group #ArgumentError: Trait not registered: build_user_group
end
end
我没有按正确的方式调用 build_user_group。它认为我正在尝试访问具有该名称的特征。正确的称呼方式是什么?
理想情况下,build_user_group 将是一个私有函数,但如果这样更容易使用,也可以是 public。
您可以在 RSpec 测试中像这样模拟它:
context "...." do
it "...." do
user_group = double("user_group")
allow(user).to receive(:build_user_group).and_return(:user_group)
expect(....).to eq(....)
end
end
有关 RSpec 文档和示例,请参阅 here。
让我知道这是否适合你,或者如果你有任何其他问题!
您可以在 FactoryGirl 中使用回调来调用您的方法:
factory :product do
name "Default Name"
after(:build) do |p|
p.build_user_group
end
end
我认为当您使用工厂构建产品时不会调用该方法,因为您的 FactoryGirl strategy 是 :build
而不是 :create
(尽管您的问题是 'create').如果它在您创建产品时没有调用该方法,那么可能存在更深层次的问题,即为什么您的模型回调没有被调用。