加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – FactoryGirl在开发环境中创建对象

发布时间:2020-12-17 02:45:13 所属栏目:百科 来源:网络整理
导读:当我在开发中启动rails控制台时,我看到FactoryGirl创建了对象.显然我做错了,但是这样做的正确方法是什么?这段代码使我的测试工作…… # tests/factories/board.rbFactoryGirl.define do factory :word do sequence(:text) { |n| "FAKETEXT#{n}" } end facto
当我在开发中启动rails控制台时,我看到FactoryGirl创建了对象.显然我做错了,但是这样做的正确方法是什么?这段代码使我的测试工作……

# tests/factories/board.rb
FactoryGirl.define do

    factory :word do
        sequence(:text) { |n| "FAKETEXT#{n}" }
    end

    factory :board do
        trait :has_words do
            words [
                FactoryGirl.create(:word,id: "514b81cae14cfa78f335e250"),FactoryGirl.create(:word,id: "514b81cae14cfa7917e443f0"),id: "514b81cae14cfa79182407a2"),id: "514b81cae14cfa78f581c534")
            ]
        end
    end

end

请注意,在我的配置目录中的任何文件中都没有提到工厂的任何内容,因此gem会自动进行任何加载.我的Gemfile的相关部分是:

# Stuff not to use in production
group :development,:test do
    # Command-line debugger for development
    gem "debugger"

    # for unit testing - replace fixtures
    gem "factory_girl_rails"
end

所以我可以把工厂女孩带出开发环境.但我认为这些记录是在工厂使用之前创建的,这表明我的工厂编写错误.但如果你告诉我工厂写得正确,我就会这样做.

解决方法

有同样的问题.有两种方法可以解决这个问题,

1.使用FactoryGirl语法引用工厂中的Factory.

用factory :: my_factory替换FacotryGirl.create(:my_factory)

关于此的更多信息,https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations

2. factory_girl:require =>在Gemfile中为false

这会导致Factories在启动时生成对象,

group :development,:test do  
  gem 'factory_girl_rails'
end

为什么?在Rails启动期间,Bundler需要开发组中的所有gem,而FactoryGirl似乎需要所有工厂文件.要求工厂评估Ruby代码,因此调用FactoryGirl.create(:my_factory).

这可以修复,

# Gemfile
group :development,:test do  
  gem 'factory_girl_rails',:require => false
end

只需确保在测试环境中手动要求factory_girl,EG

# spec_helper
require 'factory_girl'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读