耙黄瓜和耙子规格总是使用“开发”环境

我运行Cucumber和RSpec测试的rake任务总是使用我的development环境。

以下是相关的配置文件:

RAILS_ROOT/config/environments/cucumber.rb

 # Edit at your own peril - it's recommended to regenerate this file # in the future when you upgrade to a newer version of Cucumber. # IMPORTANT: Setting config.cache_classes to false is known to # break Cucumber's use_transactional_fixtures method. # For more information see https://rspec.lighthouseapp.com/projects/16211/tickets/165 config.cache_classes = true # Log error messages when you accidentally call methods on nil. config.whiny_nils = true # Show full error reports and disable caching config.action_controller.consider_all_requests_local = true config.action_controller.perform_caching = false # Disable request forgery protection in test environment config.action_controller.allow_forgery_protection = false # Tell Action Mailer not to deliver emails to the real world. # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test # config.gem 'cucumber-rails', :lib => false, :version => '>=0.3.2' unless File.directory?(File.join(Rails.root, 'vendor/plugins/cucumber-rails')) # config.gem 'database_cleaner', :lib => false, :version => '>=0.5.0' unless File.directory?(File.join(Rails.root, 'vendor/plugins/database_cleaner')) # config.gem 'capybara', :lib => false, :version => '>=0.3.5' unless File.directory?(File.join(Rails.root, 'vendor/plugins/capybara')) # config.gem 'rspec', :lib => false, :version => '>=1.3.0' unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec')) # config.gem 'rspec-rails', :lib => false, :version => '>=1.3.2' unless File.directory?(File.join(Rails.root, 'vendor/plugins/rspec-rails')) 

RAILS_ROOT/config/environments/test.rb

 # Settings specified here will take precedence over those in config/environment.rb # The test environment is used exclusively to run your application's # test suite. You never need to work with it otherwise. Remember that # your test database is "scratch space" for the test suite and is wiped # and recreated between test runs. Don't rely on the data there! config.cache_classes = true # Log error messages when you accidentally call methods on nil. config.whiny_nils = true # Show full error reports and disable caching config.action_controller.consider_all_requests_local = true config.action_controller.perform_caching = false # Configure memcached FA_MEMCACHED_SERVER = '127.0.0.1' FA_MEMCACHED_PORT = '11211' config.cache_store = :mem_cache_store, [FA_MEMCACHED_SERVER, FA_MEMCACHED_PORT].join(':'), { :namespace => Rails.env.to_s } # Disable request forgery protection in test environment config.action_controller.allow_forgery_protection = false # Tell ActionMailer not to deliver emails to the real world. # The :test delivery method accumulates sent emails in the # ActionMailer::Base.deliveries array. config.action_mailer.delivery_method = :test config.log_level = :debug 

RAILS_ROOT/features/support/env.rb

 # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril. # It is recommended to regenerate this file in the future when you upgrade to a # newer version of cucumber-rails. Consider adding your own code to a new file # instead of editing this one. Cucumber will automatically load all features/**/*.rb # files. ENV["RAILS_ENV"] ||= "cucumber" require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support require 'cucumber/rails/rspec' require 'cucumber/rails/world' require 'cucumber/rails/active_record' require 'cucumber/web/tableish' # allows checking outgoing email existant and content require 'email_spec' require 'email_spec/cucumber' require 'capybara/rails' require 'capybara/cucumber' require 'capybara/session' require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript # Capybara defaults to XPath selectors rather than Webrat's default of CSS3. In # order to ease the transition to Capybara we set the default here. If you'd # prefer to use XPath just remove this line and adjust any selectors in your # steps to use the XPath syntax. Capybara.default_selector = :css # If you set this to false, any error raised from within your app will bubble # up to your step definition and out to cucumber unless you catch it somewhere # on the way. You can make Rails rescue errors and render error pages on a # per-scenario basis by tagging a scenario or feature with the @allow-rescue tag. # # If you set this to true, Rails will rescue all errors and render error # pages, more or less in the same way your application would behave in the # default production environment. It's not recommended to do this for all # of your scenarios, as this makes it hard to discover errors in your application. ActionController::Base.allow_rescue = false # If you set this to true, each scenario will run in a database transaction. # You can still turn off transactions on a per-scenario basis, simply tagging # a feature or scenario with the @no-txn tag. If you are using Capybara, # tagging with @culerity or @javascript will also turn transactions off. # # If you set this to false, transactions will be off for all scenarios, # regardless of whether you use @no-txn or not. # # Beware that turning transactions off will leave data in your database # after each scenario, which can lead to hard-to-debug failures in # subsequent scenarios. If you do this, we recommend you create a Before # block that will explicitly put your database in a known state. Cucumber::Rails::World.use_transactional_fixtures = true # How to clean your database when transactions are turned off. See # http://github.com/bmabey/database_cleaner for more info. if defined?(ActiveRecord::Base) begin require 'database_cleaner' require 'database_cleaner/cucumber' DatabaseCleaner.strategy = :truncation, {:except => %w[roles]} rescue LoadError => ignore_if_database_cleaner_not_present end end 

RAILS_ROOT/spec/spec_helper.rb

 # 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(File.join(File.dirname(__FILE__),'..','config','environment')) require 'spec/autorun' require 'spec/rails' # Uncomment the next line to use webrat's matchers #require 'webrat/integrations/rspec-rails' # Requires supporting files with custom matchers and macros, etc, # in ./support/ and its subdirectories. Dir[File.expand_path(File.join(File.dirname(__FILE__),'support','**','*.rb'))].each {|f| require f} Spec::Runner.configure do |config| # If you're not using ActiveRecord you should remove these # lines, delete config/database.yml and disable :active_record # in your config/boot.rb config.use_transactional_fixtures = true config.use_instantiated_fixtures = false config.fixture_path = RAILS_ROOT + '/spec/fixtures/' # == Fixtures # # You can declare fixtures for each example_group like this: # describe "...." do # fixtures :table_a, :table_b # # Alternatively, if you prefer to declare them only once, you can # do so right here. Just uncomment the next line and replace the fixture # names with your fixtures. # # config.global_fixtures = :table_a, :table_b # # If you declare global fixtures, be aware that they will be declared # for all of your examples, even those that don't use them. # # You can also declare which fixtures to use (for example fixtures for test/fixtures): # # config.fixture_path = RAILS_ROOT + '/spec/fixtures/' # # == Mock Framework # # RSpec uses its own mocking framework by default. 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 # # == Notes # # For more information take a look at Spec::Runner::Configuration and Spec::Runner end 

RAILS_ROOT/Gemfile

 group :test, :cucumber do gem "cucumber-rails", "0.3.2" gem "rspec-rails", "1.3.3" gem "database_cleaner", "0.5.0" gem "capybara", "0.3.9" gem "selenium-client", "1.2.18" gem "sqlite3-ruby", "1.3.1" gem "email_spec", "~> 0.6.3", :require => 'spec' gem "factory_girl" gem "launchy" end group :development do gem "factory_girl" gem "ruby-prof" end 

在RAILS_ROOT / Gemfile上

执行:向此组添加特定的仅测试gem:

 group :test do gem 'cucumber-rails' gem 'capybara' gem 'database_cleaner' end 

而不是将它们设置为用于开发和其他任何地方。 这应该工作。

PS:编辑上面的代码来设置你将用于测试的gem,我只是复制/粘贴我在目前打开的项目中使用的那些作为例子。

当您升级到Rails 3时,您是否可以在RAILS_ENV上进行全局查找和替换?

test_helper.rb的第一行是否还有其他内容?

ENV [“RAILS_ENV”] =“测试”

在实际环境变量中,它应该仍然是RAILS_ENV,而不是:: Rails.env,因此请确保您没有针对该行代码的ENV [“Rails.env”] =“test”。

确保它看起来像以前一样。 不是因为我个人犯了这个错误而知道… 🙂

配置文件不仅与设置rails环境有关。

检查你的lib/tasks/cucumber.rake文件,如果它不包含它,已经添加了以下一行,具体取决于你的rails版本(我在’begin’行之后添加了它):

 ENV["RAILS_ENV"] ||= 'cucumber' #for rails2 Rails.env ||= ActiveSupport::StringInquirer.new('cucumber') #for rails3 

请注意,例如,如果您直接在application.rb中将环境设置为开发,那么您的测试将在开发中运行。

另外还有另一种方法可以将环境设置为黄瓜。 例如,如果您使用Passenger和Apache运行rails,则可以通过在虚拟主机配置中添加"RailsEnv cucumber"行在黄瓜环境中运行黄瓜测试。