Minitest:当灯具存在时,如何用空表测试逻辑?

时间:2015-01-19 05:20:01

标签: ruby-on-rails minitest

我有一个表'Project'的装置,它在表格中创建了一些条目。当我运行需要数据在表中的测试时,一切正常但我还想运行集成测试,在没有项目时测试某些横幅的存在。横幅通过javascript显示。

因此,在我的测试中,我在访问页面之前运行Project.delete_all。但是,当页面加载时,它仍会显示通过灯具创建的项目,即使我从表中删除了它们。就好像测试没有从表中加载一样。

这是我的测试:

  #   Given I am signed in
  #   And I am on the projects page
  #   When I have no projects
  #   Then I see a banner prompting me to create one
  scenario 'User sees prompt to create project', js: true do
    Project.delete_all

    visit projects_path

    page.must_have_content I18n.t('project.create_project.title')
  end

我使用Minitest和Capybara以及selenium或poltergeist javascript驱动程序。

1 个答案:

答案 0 :(得分:1)

我认为这种行为的最可能原因是您正在删除主线程上的项目,但Selenium正在另一个没有删除项目的线程上运行。每个线程都有自己的数据库事务,因此您在一个线程上所做的更改不会反映在另一个线程上。

我确保你的test_helper.rb文件中有这样的东西:

# Capybara driver
Capybara.javascript_driver = :selenium

# Make all database transactions use the same thread
ActiveRecord::ConnectionAdapters::ConnectionPool.class_eval do
  def current_connection_id
    Thread.main.object_id
  end
end

这将确保所有数据库更改都发生在主线程上。