我正在使用 Ruby on Rails 3.2.2、cucumber-rails-1.3.0、rspec-rails-2.8.1 和 capybara-1.1.2。我想要使用 Selenium 来测试 JavaScript,但是不希望每次在终端窗口中运行
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