【发布时间】:2020-11-17 03:42:48
【问题描述】:
我有一个应用程序,您可以选择一个复选框,单击提交按钮,然后更新值。在现实世界中,单击会触发 API 调用,并且值会随响应更新。在调用 API 和返回值之间,我还将 value-to-be-updated-area 设置为使用微调器(加载微调器)填充。这在现实生活中非常有用。但是,在测试中,我想确保微调器出现、消失,然后新值就位。在测试环境中(使用rspec)我设置了一个sinatra假服务来响应所有通过webmock的stub_request的API调用。
所以问题在于,sinatra 真的很快就给出了价值,如此之快,以至于水豚永远看不到旋转器。 (我认为这就是问题所在)
我尝试人为地减慢对这类功能规范的 sinatra 响应,但没有奏效。此外,我宁愿不这样做,因为我希望套件速度快。这是一个示例规范:
it 'lets the user change the pickup library of a hold', js: true do
visit holds_path
page.check 'hold_list__3911148'
page.select 'A terrific value', from: 'some_dropdown'
page.click_button 'Update Selected Things'
expect(page).to have_css 'spinner-border' # this will _always_ fail to be detected
expect(page).to have_css '#hold3911148 .pickup_at', text: 'York'
end
【问题讨论】:
-
你用的是什么驱动?
-
我试过
:selenium、:selenium_headless、:selenium_chrome和:selenium_chrome_headless。我默认使用:selenium_chrome_headless作为 js 功能规范的默认设置。 -
你确定元素真的出现了吗?在减慢 Sinatra 响应的情况下,“它不起作用”是什么意思?如果 Sinatra 从未响应,那么微调器应该无限期地存在并且可见,那么会发生什么? “我希望套件快速”很好,但如果它不能代表您在现实世界中的应用,那么它就不是一个有用的约束。
-
是的,该元素出现了,这就是我所说的“在现实生活中使用效果很好”的意思 - 如果我在 sinatra 中将
sleep添加到我的伪造 Web 服务中,它还会显示测试中的微调器。使用“带头”浏览器。 “它不起作用”意味着它没有找到微调器,规范失败。如果我尝试延长睡眠时间,使其在影响中永远不会响应,即使我可以看到浏览器执行操作并看到微调器出现,规范失败说它找不到那个微调器。我愿意为了测试的准确性而牺牲套件的速度,我很好奇我是否遗漏了一些东西。
标签: ruby-on-rails ruby rspec capybara