Ruby on rails Rspec改变偏好值,污染发展环境

Ruby on rails Rspec改变偏好值,污染发展环境,ruby-on-rails,testing,rspec,rspec-rails,webrick,Ruby On Rails,Testing,Rspec,Rspec Rails,Webrick,更新:这根本不是关于我的数据库,而是关于Spree存储在内存缓存中的首选项,该内存缓存被我的测试污染了。见下面我的答案 我正在Rails 3.1.4上运行一个Spree应用程序,使用Ruby 1.9.3-p0、rspec Rails 2.8.1、rspec 2.8.0 Rspec在我的开发机器上与Webrick进行了奇怪的交互,这让我觉得它在某种程度上使正在运行的Webrick实例切换到使用测试数据库 我的HomeController有一个规格: require 'spec_helper'

更新:这根本不是关于我的数据库,而是关于Spree存储在内存缓存中的首选项,该内存缓存被我的测试污染了。见下面我的答案


我正在Rails 3.1.4上运行一个Spree应用程序,使用Ruby 1.9.3-p0、rspec Rails 2.8.1、rspec 2.8.0

Rspec在我的开发机器上与Webrick进行了奇怪的交互,这让我觉得它在某种程度上使正在运行的Webrick实例切换到使用测试数据库

我的HomeController有一个规格:

require 'spec_helper'

describe HomeController do
  render_views

describe "GET 'index'" do
  it "should be successful" do
    get 'index'
    response.should be_success
  end
end

end
当我在本地主机(开发机器)上启动Webrick时,我的主页在浏览器中运行良好。第一次在HomeController上运行Rspec时,其索引操作对应于主页,测试通过

Rspec运行后,Webrick中的页面会中断,因为以前填充了文本数据的数据库字段现在为零。随后的Rspec迭代也会中断

那么,Rspec是否让Webrick停止使用我的开发数据库,开始使用我的测试数据库,为什么?它是spec_helper.rb中的
ENV[“RAILS_ENV”]| |=“test”
行吗

(这是我的spec_helper.rb和消毒数据库.yml:)

spec_helper.rb(我已经安装了Spork和Autotest,但是当我没有运行它们时会发生此错误。)

database.yml

development:
  adapter: mysql2
  host: localhost
  database: <APP>_development 
  username: <USER>
  password: <PASSWORD>

# 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: mysql2
  host: localhost
  database: <APP>_test 
  username: <USER>
  password: <PASSWORD>

production:
  adapter: mysql2
  host: localhost
  database: <APP>_prod
  username: <PROD_USER>
  password: <PROD_PASSWORD>
开发:
适配器:mysql2
主机:本地主机
数据库:\ u开发
用户名:
密码:
#警告:定义为“测试”的数据库将被删除并删除
#运行“rake”时从开发数据库重新生成。
#请勿将此数据库设置为与开发或生产相同的数据库。
测试:
适配器:mysql2
主机:本地主机
数据库:\ u测试
用户名:
密码:
制作:
适配器:mysql2
主机:本地主机
数据库:_prod
用户名:
密码:

事实证明,这是存储在缓存中的首选项的问题,而不是数据库的问题

Josh Jacobs回答了这个问题(并且解释得很好)


解决方案是为测试和开发配置不同的缓存存储。在test.rb中,我添加了config.cache\u store=:memory\u store,重新启动了spork,一切正常。

我应该补充一点,重新启动Webrick后,整个过程再次开始。Webrick找到丢失的数据库字段(可能仍在开发数据库中)。Rspec也可以用于一次迭代。我只是使用Unicorn而不是WEbrick,它复制了相同的错误(尽管在出现之前我必须运行Rspec两次)。Ruby 1.9.2上也存在问题。如果我注释掉
ENV[“RAILS_ENV”]| |=“test”
,那么Rspec会一直通过,问题就会消失——但这不是正确的答案!如果我让它
ENV[“RAILS\u ENV”]=“test”
,问题仍然存在。
development:
  adapter: mysql2
  host: localhost
  database: <APP>_development 
  username: <USER>
  password: <PASSWORD>

# 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: mysql2
  host: localhost
  database: <APP>_test 
  username: <USER>
  password: <PASSWORD>

production:
  adapter: mysql2
  host: localhost
  database: <APP>_prod
  username: <PROD_USER>
  password: <PROD_PASSWORD>