如何找出rails功能测试失败的原因

时间:2017-05-29 13:49:20

标签: ruby-on-rails capybara poltergeist

我们目前正在研究一种绘图软件,我们使用Leaflet定制左右侧边栏以及文本过滤器,我们可以过滤不同的POI功能。整件事看起来像这样:

enter image description here

流程如下

  1. 用户访问唯一链接下的地图
  2. 控制器首先呈现HTML模板(没有数据发布)
  3. 在我们的javascript中,ajax调用获取数据并呈现标记,某些面板等等。
  4. 我们使用水豚与恶作剧进行所有功能测试。

    在我们的掌握中,一切都在发挥作用。 在另一个分支中,我添加了密码保护,因此如果地图受密码保护且尚未在当前会话中解锁,则会弹出引导模式。

    除了最近失败的一些功能测试以及搞砸了东西之后,一切都工作得很好我仍然不知道究竟是什么原因。

    让我们看一下这个测试

    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中......

    enter image description here

    我一直在搞乱测试环境,这有影响:

    config.action_controller.asset_host = "file://#{::Rails.root}/public"                                                                                             
    config.assets.prefix = 'assets_test'
    

    测试通过,因为数据现在存在。屏幕截图显示缺少的资产,这些资产由正确的警告消息Not allowed to load local resource: <path>引导。我很困惑,因为查询数据是通过ajax调用从capybara告诉无法访问的其中一个文件调用的。 enter image description here

    我不知道如何继续,因为我不想开始跳过测试。我希望你能指导我找到错误。

    提前致谢, 岸堤

    更新

    感谢Thomas对ES6功能的暗示。我使用了poltergeist的检查员模式,因此能够发现我介绍的箭头功能!这就是为什么JS驱动程序无法处理我正在传递给未解决的承诺的回调......

1 个答案:

答案 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检查按钮实际上是否可被用户点击,因此请确保您没有过早点击按钮(在按钮附加任何行为之前)实际附上)