我正在使用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 Documentation和ROOT_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
答案 0 :(得分:4)
我遇到了同样的问题,并设法通过更改ROOT_APP/features/support/env.rb
这
Cucumber::Rails::Database.javascript_strategy = :truncation
到
Cucumber::Rails::Database.javascript_strategy = :transaction
希望这会有所帮助......