标签: factory-bot

Factory Girl怎么没有对独特属性进行排序?

我的控制器规范失败,因为Factory Girl似乎正在创建非唯一用户,即使我对需要唯一的用户属性进行排序.

错误

  1) TopicsController POST #create when topic is invalid should render new
     Failure/Error: let(:invalid_topic) {Factory.build :invalid_topic}
     ActiveRecord::RecordInvalid:Validation failed: Email has already been taken, Username has already been taken

  2) TopicsController POST #create when topic is valid should redirect to show
     Failure/Error: let(:valid_topic) {Factory.build :topic}
     ActiveRecord::RecordInvalid:
       Validation failed: Email has already been taken, Username has already been taken
Run Code Online (Sandbox Code Playgroud)

控制器规格(RSpec)

  describe "POST #create" do                          
    let(:valid_topic) {Factory.build :topic}
    let(:invalid_topic) {Factory.build :invalid_topic}

    context "when topic is invalid" do
      it "should render new" …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails factory-bot

11
推荐指数
1
解决办法
5080
查看次数

使用文件上传测试真的很慢

我刚刚将载波图像的验证添加到模型中,现在测试运行速度非常慢.我怎样才能加快这个过程?我觉得必须有更好的方法.


我一直在没有验证的情况下运行,并且过去能够在大约140秒内完成我的rspec测试,但是因为我现在验证了:display_pic我必须将实际文件上传添加到我的项目工厂.这已经增加到240秒!140已经在沉重的一面,这只是疯了.

这就是carrierwave github页面建议设置Factory Girl的方法:

FactoryGirl.define do
  factory :project do
    display_pic { File.open(File.join(Rails.root, 'spec', 'support', 'projects', 'display_pics', 'test.jpg')) }
  end
end
Run Code Online (Sandbox Code Playgroud)

我做了上面的test.jpg只是一个空文本文件,所以它本质上尽可能小.

我还遵循了carrierwave建议来设置测试:

CarrierWave.configure do |config|
  config.storage = :file
  config.enable_processing = false
end
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails carrierwave factory-bot

11
推荐指数
2
解决办法
2087
查看次数

如何从引擎中使用FactoryGirl工厂

我们有两个共享相同数据库和模型的Web应用程序.为了保持DRY,我们创建了一个包含所有模型的引擎.此引擎通过Gemfile包含在相应的应用程序中.我们确实在引擎内部使用RSpec和FactoryGirl进行了测试.

现在我们正在尝试编写集成测试,我们希望使用引擎中的工厂而无需复制或符号链接.有没有办法以编程方式实现这一目标?

rspec ruby-on-rails factory-bot

11
推荐指数
1
解决办法
1832
查看次数

分享不同工厂的特征

我有许多模型可以是authorable(有一个作者字段)和/或tenancyable(有一个租户字段).所以,我写了两个问题.

问题出在测试中.我曾使用该shared_examples_for块为关注点编写测试,并将它们包含在我的模型测试中.无论如何,要做到这一点,我有几个特征和后块,例如:

after(:build) do |authorable|
  authorable.author = build(:user, tenant: authorable.tenant)
end

trait :no_author do
  after(:build) do |authorable|
    authorable.author = nil
  end
end

trait :no_tenant do
  tenant nil
end
Run Code Online (Sandbox Code Playgroud)

在所有可租赁和可授权的模型的工厂中,这段代码应该是相同的.

我没有找到任何办法做到这一点.可能吗?

ruby traits factory-bot

11
推荐指数
1
解决办法
1523
查看次数

如何解决factory_girl错误的参数个数错误

#rspec test code
@room = FactoryGirl.build(:room)

#factory definition
factory :room do
  length {10}
  width {20}
end

#code implementation
class Room
  attr_accessor :length, :width

  def initialize(length,width)
     @length = length
     @width = width 
  end

end
Run Code Online (Sandbox Code Playgroud)

尝试构建@room时,运行rspec会导致此错误

ArgumentError:参数数量错误(0表示2)

ruby factory-bot

10
推荐指数
2
解决办法
5848
查看次数

工厂女孩序列没有递增

我正试图让FactoryGirl为我生成一些名字,但序列似乎没有增加.

# spec/factories/vessel.rb
require 'factory_girl'
FactoryGirl.define do

  sequence :vessel_name do |n|
    "TK42#{n}"
  end

  factory :vessel do
    name FactoryGirl.generate(:vessel_name)
    vessel_type 'fermenter'
    volume_scalar 100.0
    volume_units 'bbl'
  end
end
Run Code Online (Sandbox Code Playgroud)
# spec/models/vessel_spec.rb
require 'spec_helper'

describe Vessel do

  context 'working in the factory' do

    it 'makes a valid vessel' do
      vessel = FactoryGirl.create(:vessel)
      vessel.should be_valid, "Invalid vessel #{vessel.valid? || vessel.errors.messages.inspect}"
    end

    it 'makes another valid vessel' do
      vessel = FactoryGirl.create(:vessel)
      vessel.should be_valid, "Invalid vessel #{vessel.valid? || vessel.errors.messages.inspect}"
    end

  end

end
Run Code Online (Sandbox Code Playgroud)

规格输出是

Vessel
  working in the …
Run Code Online (Sandbox Code Playgroud)

rspec2 ruby-on-rails-3 factory-bot

10
推荐指数
1
解决办法
6107
查看次数

如何使用FactoryGirl工厂构建开发数据库?

我已经构建了一些精心制作的FactoryGirl工厂定义来测试Rails项目,为此它们运行良好.

我现在想用脚本(Ruby,Rake,等等......)使用相同的定义,用大量有效的,正确关联的记录来填充Rails开发数据库.

我确信这是一项常见任务,但无法找到有用的参考资料.

什么是最佳做法?如何进行?

说工厂在spec/factories.rb.接下来是什么?谢谢.

更新

还在苦苦挣扎.试过这个rake任务.

require 'factory_girl'
require 'spec/factories'

namespace :db do
  desc "Fill database with trial data"
  task :populate => :environment do
    Rake::Task['db:reset'].invoke
    50.times do |n|
      # Make a consistent set of related records.
      team = FactoryGirl.create(:team, :completed)
      team.members << FactoryGirl.create(:member)
      FactoryGirl.create(:design, :team => team)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

唉,这找不到我的factories.rb:

rake aborted!
cannot load such file -- spec/factories
Run Code Online (Sandbox Code Playgroud)

在其他任何地方,项目根相对要求路径工作正常.什么是秘密握手?

development-environment ruby-on-rails factory-bot

10
推荐指数
1
解决办法
3794
查看次数

FactoryGirl attributes_for与关联

有以下工厂:

factory :car do
    name 'Some car'
    engine_value 1.6
    color '#ff0000'
    car_type
    engine_type
    transmission
    drive_type
    material
end
Run Code Online (Sandbox Code Playgroud)

如你所见,有很多相关的对象.但是代码

attributes_for(:car)
Run Code Online (Sandbox Code Playgroud)

只生成:name=>"Some car", :engine_value=>1.6, :color=>"#ff0000"}哈希.我需要获得具有所有属性的哈希.我该怎么做?谢谢.

rspec ruby-on-rails factory-bot

10
推荐指数
1
解决办法
2287
查看次数

我似乎无法在spec_helper.rb中将"config.include FactoryGirl :: Syntax :: Methods"添加到我的rspec配置块中

如果我添加:

config.include FactoryGirl::Syntax::Methods  
Run Code Online (Sandbox Code Playgroud)

RSpec.configure do |config|  
Run Code Online (Sandbox Code Playgroud)

并运行rspec,我看到这个错误:

/Users/perry_mac/rails_projects/mymri/spec/spec_helper.rb:21:in"block in":未初始化的常量FactoryGirl(NameError)

我的gemfile.lock可以在这个pastebin中看到
我的gemfile可以在这个pastebin中看到

如果我省略Rspec.comfigure语句,我的测试都运行正常.我想使用缩写语法,但我不确定我在这里做错了什么.

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

10
推荐指数
3
解决办法
9181
查看次数

Factory Girl/Rspec - "Trait Not Registered"错误

跟随Ben Walker的(惊人的)让我们用Rails构建Instagram,特别是BDD版本.教程使用FactoryGirl.我通过一些测试得到以下错误:

精简版

Failure/Error: post = create( :post, user_id = user.id )<br>
ArgumentError:<br>
Trait not registered: 1
Run Code Online (Sandbox Code Playgroud)

我不能让Ben甚至用我的repo克隆重新创建bug ,而我在Stack Overflow中找不到任何"trait not registered"问题.

这是我的第一个问题,所以如果我在方面做错了,请告诉我.在此先感谢您的帮助!

代码选择:

投机/ factories.rb

FactoryGirl.define do
  factory :post do
    caption "nofilter"
    image Rack::Test::UploadedFile.new(Rails.root + 'spec/files/images/coffee.jpg', 'image/jpg')
    user_id 1
  end
  factory :user do
    email 'fancyfrank@gmail.com'
    user_name 'Arnie'
    password 'illbeback'
    id 1
  end
end
Run Code Online (Sandbox Code Playgroud)

规格/功能/ viewing_posts_spec.rb

require 'spec_helper'

feature 'viewing individual posts' do
  background do
    user = create :user
    post = create( :post, user_id …
Run Code Online (Sandbox Code Playgroud)

ruby rspec ruby-on-rails factory-bot

10
推荐指数
1
解决办法
7712
查看次数