微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

当我在开发中启动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'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐