UPDATE:これは私のデータベースに関するものではなく、Spreeが私のテストで汚染されたメモリキャッシュに保存された設定に関するものです。下の私の答えを見てください。Rspecが環境設定値を変更して開発環境を汚染する
は、私は、Ruby 1.9.3-p0と、RSpecのレール2.8.1、2.8.0 RSpecので、Railsの3.1.4のシュプレーアプリケーションを実行しています。
私の開発マシンでは、RspecがWebrickと奇妙なやり取りをしているため、テスト用データベースを使用してWebrickインスタンスを実行していると思われています。
私は自分にHomeControllerのための1つの仕様があります。
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反復も中断します。
したがって、私の開発データベースを使用してWebrickを停止し、テストデータベースの使用を開始する理由は何ですか? spec_helper.rbのENV["RAILS_ENV"] ||= 'test'
行ですか?
(ここでは私のspec_helper.rbと消毒database.ymlのです:)
spec_helper.rb(私は先割れスプーンとオートテストがインストールされているが、私はあまりにもそれらを実行しているわけではないとき、このエラーが発生します。)
require 'rubygems'
require 'spork'
#uncomment the following line to use spork with the debugger
#require 'spork/ext/ruby-debug'
Spork.prefork do
# Loading more in this block will cause your tests to run faster. However,
# if you change any configuration or code from libraries loaded here, you'll
# need to restart spork for it take effect.
# This file is copied to ~/spec when you run 'ruby script/generate rspec'
# from the project root directory.
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
# require 'capybara/rspec'
# Requires supporting files with custom matchers and macros, etc,
# in ./support/ and its subdirectories.
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
#require 'factories'
RSpec.configure do |config|
# == Mock Framework
#
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
#
# config.mock_with :mocha
# config.mock_with :flexmock
# config.mock_with :rr
config.mock_with :rspec
config.fixture_path = "#{::Rails.root}/spec/fixtures"
#config.include Devise::TestHelpers, :type => :controller
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, comment the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
end
@configuration ||= AppConfiguration.find_or_create_by_name("Default configuration")
PAYMENT_STATES = Payment.state_machine.states.keys unless defined? PAYMENT_STATES
SHIPMENT_STATES = Shipment.state_machine.states.keys unless defined? SHIPMENT_STATES
ORDER_STATES = Order.state_machine.states.keys unless defined? ORDER_STATES
# Usage:
#
# context "factory" do
# it { should have_valid_factory(:address) }
# end
RSpec::Matchers.define :have_valid_factory do |factory_name|
match do |model|
Factory(factory_name).new_record?.should be_false
end
end
end
Spork.each_run do
# This code will be run each time you run your specs.
end
database.ymlの
私はWebrickを再起動した後に、プロセス全体が再び始まると付け加えておきます。 Webrickは欠けているデータベースフィールドを見つけます(恐らくまだ開発データベースにあります)。そして、Rspecは1回の反復でも同様です。 –
私はWEbrickの代わりにUnicornを使用しましたが、同じエラーを再生しました(ただし、Rspecを2度実行する必要がありましたが)。 –
もRuby 1.9.2の問題です。 ENV ["RAILS_ENV"] || = 'test''をコメントアウトすると、Rspecは引き続き問題を解決しますが、正しい答えにはなりません! 'ENV [" RAILS_ENV "] = 'test''とすると、問題は残っています。 –