我有一个表'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驱动程序。
答案 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
这将确保所有数据库更改都发生在主线程上。