导轨清洁测试之间的数据库无效



我是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>

最新更新