如何在不删除`test`数据库数据的情况下测试JavaScript?

时间:2012-03-18 23:07:01

标签: ruby-on-rails ruby selenium cucumber capybara

我正在使用Ruby on Rails 3.2.2,cucumber-rails-1.3.0,rspec-rails-2.8.1和capybara-1.1.2。我想使用Selenium来测试JavaScripts,但是每次在终端窗口中运行test命令行时都不要删除cucumber数据库数据。也就是说,如果我声明如下的功能:

Feature: ...

  @javascript
  Scenario: ...

JavaScript经过测试和预期。但是,在测试运行后,test数据库数据将被删除,我必须再次播种该数据库才能正确运行新测试。

我读了Official DocumentationROOT_APP/features/support/env.rb文件中的文本(似乎我安装了所有必需的Ruby宝石 - 请参阅下面有关我正在使用的Gemfile的更多信息)但我没有不明白如何避免删除数据库数据以及如何配置Cucumber和Capybara gems以便正确使用Selenium。

我该怎么做?

注意我:我想做出上述内容,因为我希望在“测试”/“运行”场景时拥有相同的test数据库数据

注意II :为了在test数据库中种子数据(我的应用程序需要使用该数据),我在RAILS_ROOT_PATH/lib/tasks/cucumber.rake文件中添加以下代码,我从终端窗口运行rake db:test:prepare命令行。

namespace :db do
  namespace :test do
    task :prepare => :environment do
      Rake::Task["db:seed"].invoke
    end
  end
end

ROOT_APP/features/support/env.rb文件中,我尝试取消注释以下两个代码块( BTW :我从未更改cucumber-rails自动生成的原始文件gem,所以它是默认的),但在运行测试后,它仍然会删除test数据库数据。

#   Before('@no-txn,@selenium,@culerity,@celerity,@javascript') do
#     # { :except => [:widgets] } may not do what you expect here
#     # as tCucumber::Rails::Database.javascript_strategy overrides
#     # this setting.
#     DatabaseCleaner.strategy = :truncation
#   end
#
#   Before('~@no-txn', '~@selenium', '~@culerity', '~@celerity', '~@javascript') do
#     DatabaseCleaner.strategy = :transaction
#   end

Gemfile摘录:

group :development, :test do
  gem "rspec-rails"
end

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

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,并设法通过更改ROOT_APP/features/support/env.rb

中的以下行来修复它

Cucumber::Rails::Database.javascript_strategy = :truncation

Cucumber::Rails::Database.javascript_strategy = :transaction

希望这会有所帮助......