【发布时间】:2021-07-13 22:33:03
【问题描述】:
我知道以前有人问过这个问题,但我找不到与这个问题类似的案例。
我有两个简单的测试:
# Helper function
def select_file(fixture = 'basic.csv')
visit '/import-contacts'
fixture_path = "#{Rails.root}/spec/fixtures"
attach_file('file', "#{fixture_path}/#{fixture}")
end
it 'first test example' do
select_file
click_button 'Import'
['Name', 'Date of Birth', 'Phone', 'Address', 'Credit Card', 'Email'].each do |file_column|
expect(page).to have_content(file_column)
end
end
it 'second test example same instructions as above' do
select_file
click_button 'Import'
['Name', 'Date of Birth', 'Phone', 'Address', 'Credit Card', 'Email'].each do |file_column|
expect(page).to have_content(file_column)
end
end
我只是将一个文件附加到一个文件字段并发送一个 ajax 请求,然后检查是否在表格中填充了一些数据。但是我没有操作数据库数据,我没有存储或尝试从数据库中获取任何记录,只是一个基本的 Ajax 工作流,它根据附加的文件呈现一些数据。
当我运行所有测试套件时,第一个测试通过,但第二个测试失败,请检查两个测试是否具有相同的代码,所以我找不到解释。
当我运行第二个独立测试时,它通过了。知道会发生什么吗?
更新 这里有一些额外的细节,上面只是一个例子,但是测试不同,我必须删除第二个测试并将删除的部分添加到第一个测试中并且它通过了。
第二个测试是复制第一个测试的步骤,但最后它是单击一个按钮,该按钮进行另一个 AJAX 调用,呈现一个 js.erb 视图文件。
这是我一开始遇到的错误:
Failure/Error:
respond_to do |format|
format.js
end
ActionController::UnknownFormat:
ActionController::UnknownFormat
但是,当我将第二个测试的断言和步骤移到第一个测试时,一切都通过了。
顺便说一句,不确定是否与此问题有关,但我在测试文件的开头设置了 webdriver
Capybara.current_driver = :apparition
如果我删除上述行,测试将失败,因为它们需要等待 ajax 请求的响应才能通过。
【问题讨论】:
-
你得到的失败错误是什么?
-
@ThomasWalpole 断言失败,我会在问题中添加更多细节
标签: ruby-on-rails ajax rspec capybara