CircleCI用于测试,在Ruby on Rails环境中,使用Redis进行缓存,并将postgres用作数据库。 Rspec + cucumber 进行测试。我已经尝试了所有方法,但仍然在完全不同的许多不同规格文件中通过了失败的测试。每当我单独运行测试时,它们就会通过。

这意味着以前测试遗留下来的数据,或者有时我的一些随机FactoryGirl数据弄乱了。但是,它们总是单独通过。

首先,我尝试手动修复测试,但是我意识到这是一个更大的问题。现在,我正在尝试在每个测试中刷新db和Redis,但即使这样也不起作用。

在spec_helper中的每个操作之前/之后,我都有一个flushall,它适用于每个测试。我知道我什至在前后都不需要,但是为什么不呢。

然后,我使用具有以下设置的数据库清洁器gem:

RSpec.configure do |config|

  config.before(:suite) do
    DatabaseCleaner.clean_with(:truncation)
  end

  config.before(:each) do
    DatabaseCleaner.strategy = :transaction
  end

  config.before(:each, :js => true) do
    DatabaseCleaner.strategy = :truncation
  end

  config.before(:each) do
    DatabaseCleaner.start
  end

  config.after(:each) do
    DatabaseCleaner.clean
  end

end

我还能缺少什么?我已经研究了很长时间了。

可能是我使用了不同的Redis数据库吗?我用这个:
  Sidekiq.redis do |connection|
    connection.incr(company.message_count_key)
    connection.incr(company.all_time_message_count_key)
  end

但是后来我围绕Redis构建了一个包装器。叫做RED。那是一个不同的redis吗?做RED.flus是否足以删除所有REDIS?

最佳答案

您在应用程序中使用不同的Redis实例。在初始化程序中,您初始化一个Redis,然后使用其他Redis设置计数器,但是您从其他Redis(RED)中读取它们

红色=! Sidekiq.redis,这就是为什么它尝试读取其他Redis的原因。

我 promise 拆分redis数据库后的PS。

09-30 13:46
查看更多