如何设置自定义rake任务以使用Capybara运行验收测试?

时间:2013-01-03 14:54:36

标签: ruby ruby-on-rails-3 selenium rake capybara

我可能缺少一些东西,但是我设置了以下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,它运行得很好。

非常感谢任何帮助。

2 个答案:

答案 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任务。

相关问题