【问题标题】:rspec tests randomly failingrspec 测试随机失败
【发布时间】:2016-01-31 12:11:58
【问题描述】:

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

这意味着之前的测试中遗留了一些数据,或者我的一些随机 FactoryGirl 数据有时会搞砸。但是,它们总是单独通过。

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

我在 spec_helper 的 before/after 中都有一个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 构建了一个包装器。称为红色。那是一个不同的redis吗?做 RED.flushall 是否不足以擦除所有 REDIS?

【问题讨论】:

    标签: ruby-on-rails postgresql rspec redis circleci


    【解决方案1】:

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

    红色=! Sidekiq.redis,这就是为什么它尝试读取不同的redis。

    PS 在我提交拆分 redis 数据库之后。

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2020-03-13
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2022-07-08
      • 1970-01-01
      相关资源
      最近更新 更多