标签: factory-bot

如何在Factory girl中创建has_and_belongs_to_many关联

鉴于以下内容

class User < ActiveRecord::Base
  has_and_belongs_to_many :companies
end

class Company < ActiveRecord::Base
  has_and_belongs_to_many :users
end
Run Code Online (Sandbox Code Playgroud)

您如何为公司和用户定义工厂,包括双向关联?这是我的尝试

Factory.define :company do |f|
  f.users{ |users| [users.association :company]}
end

Factory.define :user do |f|
  f.companies{ |companies| [companies.association :user]}
end
Run Code Online (Sandbox Code Playgroud)

现在我试试

Factory :user
Run Code Online (Sandbox Code Playgroud)

也许不出所料,这会导致无限循环,因为工厂递归地使用彼此来定义自己.

更令人惊讶的是,我没有提到如何在任何地方做到这一点,是否有一种模式来定义必要的工厂或我做了一些从根本上错误的事情?

ruby-on-rails associations has-and-belongs-to-many factory-bot

119
推荐指数
5
解决办法
5万
查看次数

如何使用Factory Girl生成回形针附件?

我有模型人物有很多图像,其中图像有一个名为data的Paperclip附件字段,缩写版本如下所示:

class Person
  has_many :images
  ...
end

class Image
  has_attached_file :data
  belongs_to :person
  ...
end
Run Code Online (Sandbox Code Playgroud)

人员必须至少附上一张图像.

使用FactoryGirl时,我的代码类似于以下内容:

Factory.define :image do |a|
  a.data { File.new(File.join(Rails.root, 'features', 'support', 'file.png')) }
  a.association :person
end

Factory.define :person do |p|
  p.first_name 'Keyzer'
  p.last_name 'Soze'
  p.after_create do |person|
    person.assets = [Factory.build(:image, :person => person)]
  end
  # p.images {|images| [images.association(:image)]}
end
Run Code Online (Sandbox Code Playgroud)

(注意,我也尝试过上面注释的代码也尝试了)大多数时候,当我运行黄瓜功能时,我得到的错误类似于以下内容:

没有这样的文件或目录 - /tmp/stream,9887,0.png(Errno :: ENOENT)

...

有时测试成功运行.

谁能告诉我我在这里遇到的问题是什么,或者他们如何一起使用FactoryGirl和Paperclip来实现我想要实现的目标?

我正在使用Rails 3.

ruby-on-rails paperclip factory-bot

118
推荐指数
6
解决办法
3万
查看次数

跳过Factory Girl和Rspec的回调

我正在测试一个带有后创建回调的模型,我想在测试时只在某些情况下运行.如何从工厂跳过/运行回调?

class User < ActiveRecord::Base
  after_create :run_something
  ...
end
Run Code Online (Sandbox Code Playgroud)

厂:

FactoryGirl.define do
  factory :user do
    first_name "Luiz"
    last_name "Branco"
    ...
    # skip callback

    factory :with_run_something do
      # run callback
  end
end
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails factory-bot

97
推荐指数
9
解决办法
4万
查看次数

FactoryGirl中的构建方法和创建方法有什么区别?

Factory Girl介绍描述了FactoryGirl.build()和之间的区别FactoryGirl.create():

# Returns a User instance that's not saved
user = FactoryGirl.build(:user)

# Returns a saved User instance
user = FactoryGirl.create(:user)
Run Code Online (Sandbox Code Playgroud)

我仍然不明白两者之间的实际差异.有人可以给出一个例子,你想要使用一个而不是另一个吗?谢谢!

ruby factory-bot

88
推荐指数
3
解决办法
4万
查看次数

当在factory_girl中使用时,Faker正在生成重复数据

我正在尝试使用Faker gem将一些假数据填充到工厂中:

Factory.define :user do |user|
  user.first_name Faker::Name::first_name
  user.last_name Faker::Name::last_name
  user.sequence(:email) {|n| "user#{n}@blow.com" }
end
Run Code Online (Sandbox Code Playgroud)

但是,虽然我希望这会生成具有不同first_name和last_names的用户,但每个用户都是相同的:

>> Factory(:user)
=> #<User id: 16, email: "user7@blow.com", created_at: "2011-03-18 18:29:33",     
updated_at: "2011-03-18 18:29:33", first_name: "Bailey", last_name: "Durgan">
>> Factory(:user)
=> #<User id: 17, email: "user8@blow.com", created_at: "2011-03-18 18:29:39", 
updated_at: "2011-03-18 18:29:39", first_name: "Bailey", last_name: "Durgan">
Run Code Online (Sandbox Code Playgroud)

如何让Faker gem为每个用户生成新名称,而不仅仅重用原始用户?

ruby-on-rails factory-bot

85
推荐指数
4
解决办法
1万
查看次数

如何使用has_many关联在FactoryGirl中设置工厂

有人能告诉我,如果我只是以错误的方式进行设置吗?

我有以下具有has_many.through关联的模型:

class Listing < ActiveRecord::Base
  attr_accessible ... 

  has_many :listing_features
  has_many :features, :through => :listing_features

  validates_presence_of ...
  ...  
end


class Feature < ActiveRecord::Base
  attr_accessible ...

  validates_presence_of ...
  validates_uniqueness_of ...

  has_many :listing_features
  has_many :listings, :through => :listing_features
end


class ListingFeature < ActiveRecord::Base
  attr_accessible :feature_id, :listing_id

  belongs_to :feature  
  belongs_to :listing
end
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails 3.1.rc4,FactoryGirl 2.0.2,factory_girl_rails 1.1.0和rspec.这是我对:listing工厂的基本rspec rspec健全性检查:

it "creates a valid listing from factory" do
  Factory(:listing).should be_valid
end
Run Code Online (Sandbox Code Playgroud)

这是工厂(:上市)

FactoryGirl.define do
  factory :listing do
    headline    'headline'
    home_desc   'this is the home …
Run Code Online (Sandbox Code Playgroud)

rspec has-many-through ruby-on-rails-3.1 factory-bot

85
推荐指数
5
解决办法
8万
查看次数

如何在rails控制台中使用FactoryGirl中的工厂

我在开发环境中使用rails控制台,我想使用工厂.我怎样才能访问它们?

我试过require "FactoryGirl"哪个回归

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails factory-bot

85
推荐指数
4
解决办法
3万
查看次数

如何在Factory Girl中定义数组/哈希?

我正在尝试编写一个模拟来自Dropbox的REST服务的一些返回值的测试,该服务通过嵌套哈希为我提供数据.

我无法弄清楚如何编码我的工厂,因为返回结果是一个带有内部的数组.会怎么样?

Factory.define :dropbox_hash do
 ??
end
Run Code Online (Sandbox Code Playgroud)

Dropbox数据如下所示:

 ["/home", {"revision"=>48, "rev"=>"30054214dc", "thumb_exists"=>false, "bytes"=>0, "modified"=>"Thu, 29 Dec 2011 01:53:26 +0000", "path"=>"/Home", "is_dir"=>true, "icon"=>"folder_app", "root"=>"app_folder", "size"=>"0 bytes"}] 
Run Code Online (Sandbox Code Playgroud)

在我的RSpec中,我想要像这样的工厂电话:

Factory.create(:dropbox_hash)
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails-3 factory-bot

78
推荐指数
4
解决办法
3万
查看次数

Factory-girl创建绕过我的模型验证

我正在使用Factory Girl在我的模型/单元测试中为一个组创建两个实例.我正在测试模型以检查对.current的调用是否仅根据expiry属性返回'current'组,如下所示......

  describe ".current" do
    let!(:current_group) { FactoryGirl.create(:group, :expiry => Time.now + 1.week) }
    let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }

    specify { Group.current.should == [current_group] }
  end
Run Code Online (Sandbox Code Playgroud)

我的问题是我在模型中验证了新组的到期时间是在今天的日期之后.这会引发下面的验证失败.

  1) Group.current 
     Failure/Error: let!(:expired_group) { FactoryGirl.create(:group, :expiry => Time.now - 3.days) }
     ActiveRecord::RecordInvalid:
       Validation failed: Expiry is before todays date
Run Code Online (Sandbox Code Playgroud)

有没有办法在使用Factory Girl创建时强制创建组或绕过验证?

rspec ruby-on-rails rspec-rails ruby-on-rails-3 factory-bot

68
推荐指数
6
解决办法
3万
查看次数

FactoryGirl和多态关联

该设计

我有一个通过多态关联属于配置文件的用户模型.我选择这个设计的原因可以在这里找到.总而言之,该应用程序的许多用户具有真正不同的配置文件.

class User < ActiveRecord::Base
  belongs_to :profile, :dependent => :destroy, :polymorphic => true
end
Run Code Online (Sandbox Code Playgroud)
class Artist < ActiveRecord::Base
  has_one :user, :as => :profile
end
Run Code Online (Sandbox Code Playgroud)
class Musician < ActiveRecord::Base
  has_one :user, :as => :profile
end
Run Code Online (Sandbox Code Playgroud)

选择这个设计后,我很难做出好的测试.使用FactoryGirl和RSpec,我不确定如何以最有效的方式声明关联.

第一次尝试

factories.rb

Factory.define :user do |f|
  # ... attributes on the user
  # this creates a dependency on the artist factory
  f.association :profile, :factory => :artist 
end

Factory.define :artist do |a|
  # ... attributes for the artist profile
end
Run Code Online (Sandbox Code Playgroud)

user_spec.rb

it "should …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails factory-bot

66
推荐指数
4
解决办法
3万
查看次数