我是Rails的新手。在我的项目中,我使用RSPEC Capybara Poltergeist Selenium database_cleaner。
源代码github链接
我有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
当运行第一次接受测试时:Selenium-> Question_ID在浏览器28中,但必须是1,因为它使用database_cleaner。
为什么数据库_Cleaner不清洁我的数据库?我做错了什么?我花了一天的时间找到解决方案,但找不到。请帮我。
P.S。这是一个培训项目。
我的数据库_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
清洁表意味着它删除所有记录,并不一定意味着它重置索引计数器 - 就像删除记录3然后添加新记录一样 - 新记录 - 新记录是4.因此,在您的情况下,可能已经删除了27个记录,即使只有1个实际记录,您创建的下一个记录也将是28个记录。查询数据库以查看有多少个实际记录可以验证。
接下来,您的数据库清洁器配置应更像推荐的配置-https://github.com/databasecleaner/database_cleaner #cleaner#rspec-with-capybara-example。append_after vs之后对于稳定性很重要,并检查驱动程序名称与:JS元数据也很重要。
在测试中检查href'/uploads/attachment/file/1/test_file.dat'时,您不应该检查一个硬编码的" 1'"您创建了。因此,"/uploads/attachment/file/# {question.id }/test_file.dat"(显然, question.id
将取决于您创建了哪些对象和您的变量名称,但这至少与我认为的至少一项测试匹配。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
快速查看您的规格之后 - 您进行expect(current_path).to eq ...
的任何地方都是错误的。您应该做expect(page).to have_current_path(...)
。第一种方法可以禁用辣椒症的重试行为,并将导致片状测试。
最后 - 您的expect(page).not_to have_content t('common.button.ready')
的位置,我猜应该是expect(page).not_to have_button t('common.button.ready')
在这里您可以阅读如何使用RSpec
和CC_7和Capybara
-https://github.com/databasecleaner/database/database_cleaner#rspec-with-capybara-capybara-example/Div>