首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RSpec capybara:与Ajax相关的测试单独通过,但在一起运行时失败

RSpec capybara:与Ajax相关的测试单独通过,但在一起运行时失败
EN

Stack Overflow用户
提问于 2021-04-19 17:48:41
回答 1查看 98关注 0票数 0

我知道其他人也曾问过,但我找不到类似的情况。

我有两个简单的测试:

代码语言:javascript
复制
# 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请求,以检查表中是否填充了一些数据。然而,我没有操作Databse数据,也没有存储或尝试从数据库获取任何记录,这只是一个基本的Ajax工作流,它根据附加的文件呈现一些数据。

当我运行所有测试套件时,第一个测试通过了,但是第二个测试失败了,请检查这两个测试是否都有相同的代码,所以我找不到解释。

当我运行第二个独立测试时,它就通过了。知道会发生什么吗?

UPDATE这里有一些额外的细节,上面只是一个例子,但是测试是不同的,我不得不删除第二个测试并将删除的部分添加到第一个测试中,并且它通过了。

第二个测试是复制第一个测试的步骤,但是在最后,它单击一个按钮进行另一个AJAX调用,该调用呈现一个js.erb视图文件。

这就是我刚开始时所犯的错误:

代码语言:javascript
复制
Failure/Error:
       respond_to do |format|
         format.js
       end
     
     ActionController::UnknownFormat:
       ActionController::UnknownFormat

然而,当我将第二个测试的附加项和步骤移到第一个测试时,一切都通过了。

顺便说一句,我不确定是否与此问题有关,但我在测试文件的开头设置了webdriver

Capybara.current_driver = :apparition

如果删除上面的行,测试就会失败,因为测试需要等待ajax请求的共鸣才能通过。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 19:29:11

由于您的错误与请求的格式有关,所以我猜您希望所有的测试都使用启用js的驱动程序(selenium)运行,但只在测试开始时将current_driver设置为此。在默认的Capybara设置中,对于系统/特性规范,Capybara.current_driver在每次测试结束时被重置为Capybara.default_driver,然后如果测试被标记为js,则设置为Capybara.javascript_driver的值。如果您希望您的所有系统/特性规范使用相同的驱动程序运行,则可以设置Capybara.default_driver = :chrome (或任何您正在使用的驱动程序),否则需要用js元数据标记要使用该驱动程序运行的测试。

代码语言:javascript
复制
it 'second test example same instructions as above', js: true do
  ...
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67166897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档