我可能缺少一些东西,但是我设置了以下rake任务:
namespace :test do
Rake::TestTask.new(:acceptance => "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/acceptance/**/*_test.rb'
end
end
我正在使用Capybara进行验收测试,所以我还在test_helper.rb
文件中包含了以下代码:
DatabaseCleaner.strategy = :truncation
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
# Stop ActiveRecord from wrapping tests in transactions
self.use_transactional_fixtures = false
# Always use Selenium
Capybara.default_driver = :selenium
teardown do
DatabaseCleaner.clean # Truncate the database
Capybara.reset_sessions! # Forget the (simulated) browser state
Capybara.use_default_driver # Revert Capybara.current_driver to Capybara.default_driver
end
end
不幸的是,当我运行rake test:acceptance
时,当rake尝试运行名为selenium_test.rb
的玩具测试时出现以下错误:
.../test/acceptance/selenium_test.rb:1:in `<top (required)>': uninitialized constant ActionDispatch (NameError)
文件selenium_test.rb
位于应用的test/acceptance
文件夹中。如果我将它移动到test/functional
,它运行得很好。
非常感谢任何帮助。
答案 0 :(得分:0)
您需要在测试运行之前需要rails环境。您应该将需求添加到test_helper.rb
require File.expand_path("../../../config/environment", __FILE__)
当然,您需要执行的../
数量会因测试文件夹的深度而异。 config文件夹位于应用程序的根目录中。
答案 1 :(得分:0)
正如Yves所说,您可能需要加载rails应用程序的环境。
尝试将环境添加到依赖项:
namespace :test do
Rake::TestTask.new(:acceptance => ["test:prepare", :environment]) do |t|
# Same as before
end
end
如您所见,test:acceptance
任务不仅取决于test:prepare
任务,还取决于:environment
任务。