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

Bac*_*cko 5 ruby selenium ruby-on-rails 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: ...
Run Code Online (Sandbox Code Playgroud)

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

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

我该怎么办?

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

注意二:为了在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
Run Code Online (Sandbox Code Playgroud)

ROOT_APP/features/support/env.rb文件中,我试图取消注释以下两个代码块(BTW:我从未更改过cucumber-railsgem 自动生成的原始文件,因此它是默认的),但在运行测试后仍会删除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
Run Code Online (Sandbox Code Playgroud)

Gemfile摘录:

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

group :test do
  gem 'cucumber-rails'
  gem 'database_cleaner'
  gem 'capybara'
end
Run Code Online (Sandbox Code Playgroud)

Pau*_*aul 4

我遇到了同样的问题,并通过更改以下行来解决它ROOT_APP/features/support/env.rb

Cucumber::Rails::Database.javascript_strategy = :truncation
Run Code Online (Sandbox Code Playgroud)

Cucumber::Rails::Database.javascript_strategy = :transaction
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...