我们目前正在研究一种绘图软件,我们使用Leaflet定制左右侧边栏以及文本过滤器,我们可以过滤不同的POI功能。整件事看起来像这样:
流程如下
我们使用水豚与恶作剧进行所有功能测试。
在我们的掌握中,一切都在发挥作用。 在另一个分支中,我添加了密码保护,因此如果地图受密码保护且尚未在当前会话中解锁,则会弹出引导模式。
除了最近失败的一些功能测试以及搞砸了东西之后,一切都工作得很好我仍然不知道究竟是什么原因。
让我们看一下这个测试
feature 'Places map filter', js: true do
before do
@map = create :map, :full_public
create :place, :unreviewed, categories: 'Playground', map: @map
visit map_path(map_token: @map.public_token)
find('.open-sidebar').trigger('click')
end
scenario 'Nothing filters nothing' do
show_places
show_events
show_places_list_panel
expect(page).to <...>
end
...
end
Capybara声称无法找到一些css元素。调用screenshot_and_open_image
显示它仍然显示覆盖(隐藏其他所有内容),直到所有数据都已加载。似乎有些东西挂在我的Javascript中......
我一直在搞乱测试环境,这有影响:
config.action_controller.asset_host = "file://#{::Rails.root}/public"
config.assets.prefix = 'assets_test'
测试通过,因为数据现在存在。屏幕截图显示缺少的资产,这些资产由正确的警告消息Not allowed to load local resource: <path>
引导。我很困惑,因为查询数据是通过ajax调用从capybara告诉无法访问的其中一个文件调用的。
我不知道如何继续,因为我不想开始跳过测试。我希望你能指导我找到错误。
提前致谢, 岸堤
更新
感谢Thomas对ES6功能的暗示。我使用了poltergeist的检查员模式,因此能够发现我介绍的箭头功能!这就是为什么JS驱动程序无法处理我正在传递给未解决的承诺的回调......
答案 0 :(得分:0)
首先,确保你的Poltergeist驱动程序注册中有js_errors: true
- https://github.com/teampoltergeist/poltergeist#customization - 这样你就会报告运行时JS错误。
其次,如果您在JS代码中使用任何ES6 +功能,请确保将它们转换为ES5兼容代码,因为Poltergeist / PhantomJS仅支持JS&lt; = ES5,并且如果它解析,它将在JS分析时无声地失败JS使用let
等功能。
最后,通过使用trigger
,您绕过了Poltergeists检查按钮实际上是否可被用户点击,因此请确保您没有过早点击按钮(在按钮附加任何行为之前)实际附上)