【发布时间】:2017-02-25 18:23:01
【问题描述】:
我是 Rails 新手。在我的项目中,我使用 rspec + capybara + poltergeist + selenium + database_cleaner。
我有 postgresql 9.5.5,ubuntu 16.04 LTS。
运行测试时
rspec spec/controllers # everything work fine
运行时
rspec spec/features # everything work fine too
但是当我运行所有测试时
rspec # part of tests fail
在浏览器 28 中使用 :selenium -> question_id 运行第一次验收测试时,但必须为 1,因为它使用 database_cleaner。
为什么 database_cleaner 不清理我的数据库?我做错了什么?我花了一天时间寻找解决方案,但一无所获。 请帮帮我。
附:这是一个培训项目。
我的 Database_Cleaner 配置是:
config.use_transactional_fixtures = false
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
Warden.test_reset!
if Rails.env.test?
FileUtils.rm_rf(Dir["#{Rails.root}/public/uploads"])
end
end
【问题讨论】:
-
为什么你认为 in 必须是 1 ?根据您设置 database_cleaner 的方式,数据库可能为空但不重置 id 列计数器 - 您是否查询数据库以查看其中保存了多少问题?您的测试中不应包含任何硬编码的记录 ID。如果这不是问题,那么将您的一项测试和您的 database_cleaner 配置添加到您的问题中。
-
我将文件添加到问题中。默认情况下,我认为 db 中的问题是一个,并且添加文件的链接必须具有链接 href:'/uploads/attachment/file/1/test_file.dat',其中 1 是问题 ID。但实际上问题 id 是 28。我认为每次测试运行时数据库清理器都会清理表。
-
@ThomasWalpole - 我明白你在说什么。是的,表只有 1 行。我需要重写我的测试。谢谢你的解决方案。
-
好的——我看错了分支——我看到你现在正在谈论的测试——更新我的答案
标签: ruby-on-rails selenium capybara poltergeist database-cleaner