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

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

  @javascript
  Scenario: ...

JavaScript经过测试并符合预期。但是,在测试运行后,test数据库数据被删除,我必须重新填充该数据库才能正确运行新的测试。
我阅读了官方文档ROOT_APP/features/support/env.rb文件中的文本(看起来我安装了所有必需的Ruby gem-有关我使用的Gemfile的更多信息,请参见下文),但我不知道如何避免删除数据库数据以及如何配置Cucumber和Capybara gem以便与Selenium正常工作。 我应该做什么? 注1:上述内容是因为我希望在“测试”/“运行”场景时拥有相同的test数据库数据注2:为了在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文件中,我尝试取消注释以下一项或两项代码块(顺便说一下:我从未更改由 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个回答

4
我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

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

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

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

希望这有所帮助...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接