工厂女孩保存到开发数据库(警卫问题)

时间:2012-01-27 19:07:55

标签: ruby-on-rails ruby-on-rails-3 factory-bot

我正在使用 Rails 3.2 并将我的gemfile设置为:

# Testing Gems
gem "factory_girl_rails", :group => :test

group :development, :test do
  gem "capybara"
  gem "rspec-rails"
  gem "guard-rspec"
  gem "ruby_gntp", :require => false
  gem "addressable"
  gem "launchy"
end

但是,Factory Girl 坚持将测试记录保存到我的开发数据库而不是测试数据库。 请注意,我使用guard通过shell运行测试。

这是我的database.yml中的内容:

# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

我知道我的问题类似于这个问题:Factory girl saving records in my development database但我正在做他所做的一切,但它仍然不适合我。

我还运行了bundle updatebundle installbundle install --without test,然后再次bundle install。我原本以为这是一个Gemfile.lock问题,但我所做的一切都没有效果。

有人有什么想法吗?

更新

我所有的工厂都在使用development.sqlite3数据库,但这是一个例子:

FactoryGirl.define do
    factory :saddle, :class => Saddle do
        name            "Carlton"
        saddle_category_id  2
        description     "This is a saddle description"
        details         "Saddle details will go here!"
        best_uses       "List of best uses should go here."
        price           3025.00
    end
end

保存到我的数据库的测试代码只是saddle = Factory(:saddle)

3 个答案:

答案 0 :(得分:1)

你有同样的问题。看看你的Gemfile:

group :development, :test do

它也为:test加载了所有这些宝石。删除那部分,你应该好好去。

答案 1 :(得分:0)

您是否尝试在命令行中定义RAILS_ENV

rake test RAILS_ENV=test

答案 2 :(得分:0)

我看到你得到了答案here。问题在于使用==而不是=

我刚刚遇到了类似的问题(Rspec 3)。如您所知,文件spec/rails_helper.rb和字符串ENV["RAILS_ENV"] ||= 'test'在里面。首先,我认为它已经设置了错误的值,并试图用ENV["RAILS_ENV"] = 'test'替换它,但它没有帮助我。

然后我将此字符串移动到spec/spec_helper.rb并且它正常工作。我无法解释这种行为,但它确实有效。