ruby-on-rails - 如何确保我的 Capybara 测试中的每个场景都不会调用 Redis 和 thinking sphinx

标签 ruby-on-rails cucumber redis capybara thinking-sphinx

我在我的 Rails 应用程序中使用 Capybara 和 Cucumber。我想运行 Sphinx 重新索引和 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 的依赖,并确保数据不会在测试之间保留。

我希望 sphinx 也有类似的东西,但我一时想不起来。

关于ruby-on-rails - 如何确保我的 Capybara 测试中的每个场景都不会调用 Redis 和 thinking sphinx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12196768/

相关文章:

ruby-on-rails - 如何使用 Minitest 测试 Pundit 政策?

java - 在 Maven 中指定多个目标并分别运行它们

docker - 无法启动和连接3个docker服务-Redis,Python 3.7 Slim(Running DRF)和Celery

redis - 对 Redis 从属设备的循环读取请求

ruby-on-rails - 我正在尝试在我的 Rails 应用程序的文件夹中创建一个新文件

ruby-on-rails - 错误 : Could not find a valid gem 'rails' (>= 0) in any repository

javascript - 未捕获类型错误 : . vegas 不是函数

testing - 如何使用 Cucumber JS 在项目中执行命令行 TestCafe?

ruby-on-rails - Rails3 Google Maps 使用 selenium 进行测试

Laravel 4:调用未定义的方法 Redis::connection()