2011-03-28 33 views
11

我运行Cucumber和RSpec测试的耙子任务始终使用我的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 

回答

3

在RAILS_ROOT/Gemfile中

做: 添加特定的测试,仅宝石本组:

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

而是将它们设置为中用于发展和到处e也是。 这应该工作。

P.S:编辑上面的代码来设置您将用于测试的宝石,我只是复制/粘贴我正在使用的项目,我目前打开的项目为例。

+0

我已经更新了我的Gemfile,并更新了上述问题。尽管如此,我仍然遇到同样的问题。 – jaredonline 2011-03-28 19:59:01

+0

在这里相同,有什么成就? – giladbu 2011-04-08 06:14:17

3

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

test_helper.rb是否是第一行?

ENV [ “RAILS_ENV”] = “测试”

在实际的环境变量,应该还是RAILS_ENV,不:: Rails.env,所以一定要确保你没有ENV [“轨。 env“] =”测试“代码行。

确保它看起来像过去一样。并不是说我会因为亲自犯下这个错误而知道...... :-)

+0

当我升级到Rails 3时,我一定会记住这一点,但这实际上是Rails 2.3.9 \ = – jaredonline 2011-05-04 00:38:38

+0

谢谢 - 这正是我正在开发的项目中发生的事情 – antinome 2013-01-15 19:03:13

1

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

检查lib/tasks/cucumber.rake文件,如果它不包含它取决于你的Rails版本已经添加下列行之一,它(我加了之后“开始”线):

ENV["RAILS_ENV"] ||= 'cucumber' #for rails2 

Rails.env ||= ActiveSupport::StringInquirer.new('cucumber') #for rails3 

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

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