gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:29:58 27 4
gpt4 key购买 nike

当我在开发中启动 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"),
FactoryGirl.create(:word, id: "514b81cae14cfa79182407a2"),
FactoryGirl.create(:word, id: "514b81cae14cfa78f581c534")
]
end
end

end

请注意,在我的 config 中的任何文件中都没有提到工厂的任何内容。目录,所以无论加载是由 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

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

最佳答案

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

1. 使用 FactoryGirl 语法在 Factory 中引用 Factory。

替换 FacotryGirl.create(:my_factory)factory: :my_factory
更多信息,https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations

2. factory_girl :require => false在 Gemfile 中

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

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

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

这可以通过以下方式修复,
# Gemfile
group :development, :test do
gem 'factory_girl_rails', :require => false
end

只需确保在您的测试环境中手动 require factory_girl , EG
# spec_helper
require 'factory_girl'

关于ruby-on-rails - FactoryGirl 在开发环境中创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16092861/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com