【发布时间】: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