如何确保Redis和思维狮身人面像不会在我的Capybara测试中的每个场景中都被调用



我在rails应用程序中使用Capybara with Cucumber。我想为一些特定的测试场景运行Sphinx reindex和Redis服务器。但不利的一面是,场景非常非常缓慢,使其运行数小时。

这是我的env.rb文件

require 'rubygems'
ENV["RAILS_ENV"] = "cucumber"
require 'cucumber/rails'
require 'capybara/cucumber'
require 'capybara/rails'
require 'capybara/session'
require 'rake'
Capybara.default_selector = :css
ActionController::Base.allow_rescue = false
Cucumber::Rails::World.use_transactional_fixtures = true
Capybara.default_wait_time = 4
Capybara.ignore_hidden_elements=false
Capybara::Server.new(Capybara.app).boot
include Rake::DSL
Rake::Task["db:fixtures:load"].invoke
Before('@javascript') do
  Capybara.register_driver :selenium do |app|
    Capybara::Selenium::Driver.new(app,:browser=>:chrome )
  end
  Capybara.current_driver = :selenium
  Capybara.javascript_driver=:selenium
end
Before('@javascript', '@index') do
  `rake ts:in RAILS_ENV=cucumber` unless ThinkingSphinx.sphinx_running?
  `rake ts:start RAILS_ENV=cucumber`
end
After('@javascript','@index') do
  `rake ts:stop RAILS_ENV=cucumber`
end
Before('@javascript','@redis','@javascript') do
  `redis-server config/test_redis.conf`
  `rake redis_specifics:cache_build RAILS_ENV=cucumber --trace`
end
After('@javascript','@redis','@javascript') do
  pid = `ps aux | grep 'config/test_redis.conf'| grep -v 'grep' | awk '{print $2}'`
  `pkill #{pid}`
end

还有一个问题是,当我在不同的机器上运行这个程序时,存在一个依赖项,即Redis已经安装,并且用户有权创建和销毁文件夹。有没有更好的方法来处理这种情况?可能是为了实现Rails的Normal测试框架所使用的类似事务风格的固定装置?

非常感谢您的帮助。

我建议使用像fakeredis这样的库(https://github.com/guilleiguaran/fakeredis)。这将消除测试中对redis的依赖,并确保数据不会在测试之间保留。

我本以为狮身人面像也会有类似的东西,但我不知道有什么。

相关内容

最新更新