ruby-on-rails - RSpec capybara:涉及 Ajax 的测试单独通过但一起运行时失败
问题描述
我知道以前有人问过这个问题,但我找不到与这个问题类似的案例。
我有两个简单的测试:
# 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 工作流,它根据附加的文件呈现一些数据。
当我运行所有测试套件时,第一个测试通过,但第二个测试失败,请检查两个测试是否具有相同的代码,所以我找不到解释。
当我运行隔离的第二个测试时,它通过了。知道会发生什么吗?
更新 这里有一些额外的细节,上面只是一个例子,但是测试不同,我不得不删除第二个测试并将删除的部分添加到第一个测试中并且它通过了。
js.erb
第二个测试是复制第一个测试的步骤,但是最后它单击了一个按钮,该按钮进行了另一个呈现视图文件的 AJAX 调用。
这是我一开始遇到的错误:
Failure/Error:
respond_to do |format|
format.js
end
ActionController::UnknownFormat:
ActionController::UnknownFormat
但是,当我将第二个测试的断言和步骤移到第一个测试时,一切都通过了。
顺便说一句,不确定是否与此问题有关,但我在测试文件的开头设置了 webdriver
Capybara.current_driver = :apparition
如果我删除上述行,则测试失败,因为它们需要等待 ajax 请求的响应才能通过。
解决方案
由于您的错误与请求的格式有关,我猜您希望所有测试都使用js
启用的驱动程序(硒)运行,但仅current_driver
在测试开始时设置为该值。在默认 Capybara 设置中,对于系统/功能规范,在每次测试结束Capybara.current_driver
时重置为Capybara.default_driver
,然后如果测试被标记,js
则设置为Capybara.javascript_driver
. 如果您希望所有系统/功能规范使用您可以设置的相同驱动程序(或您正在使用的任何驱动程序)运行,否则您需要使用元数据Capybara.default_driver = :chrome
标记您想要使用该驱动程序运行的测试js
it 'second test example same instructions as above', js: true do
...
end
推荐阅读
- angular - 自定义验证器参数不会对更改做出反应
- ios - 在 Telegram 中发布一个在 iOS 上打开 Instagram 应用程序的链接
- node.js - 这个 NodeJs multer 文件上传代码有什么问题?
- php - 将 JSON 字符串发送到需要对象数组的 API 时出现问题
- php - /etc/cron.d 中的作业不适用于 ubuntu
- docker - mysql 'volume' 的一些奇怪(或不是)的事情
- python - OpenNERO Ubuntu:进程以退出代码 134 完成(被信号 6:SIGABRT 中断)
- javascript - 条纹结帐在关闭后将 Chrome 挂起几秒钟
- linux - docker-compose 找不到合适的配置文件
- sed - 如何使用 sed 用制表符替换特定字符