【问题标题】:Modify an http response in a protractor test在量角器测试中修改 http 响应
【发布时间】:2014-10-22 11:25:16
【问题描述】:

我正在尝试为我们的应用程序的登录过程编写一些端到端的测试,但我无法理解设置用户需要更改密码的场景的最佳方法。

当我们的服务器响应成功登录时,会返回一个带有changePassword 字段的用户对象。然后客户端检查响应并相应地重定向。

我的问题是设置测试以设置 changePassword 字段 - 最好的使用方法是什么?

我认为我的选择是:

  1. 为服务器创建一个全新用户的测试设置和拆卸脚本,专门用于在数据库中设置changePassword 标志的测试运行。

    这似乎是最端到端的方法,但也可能是最努力和代码最多的方法。

  2. 以某种方式截获测试中的 http 响应并修改 changePassword 标志以仅针对该测试设置。

  3. 完全模拟 http 响应。使用这种方法是从 端到端 测试中最远离的,但也许是最简单的?

哪种方法最好或最常用?此外,关于 如何 使用量角器实际实现上述(特别是 12)的任何一般指针都会很棒 - 我觉得很难从概念上直接进入我的脑海,因此很难知道要搜索什么。

我使用 protractor 作为测试框架,angular.js 为客户端提供动力,node 服务器使用 (除其他外)express.jsmongoDB

【问题讨论】:

  • 您好,我也有同样的情况。你得到了什么选择。您认为选项 2 是否可行(如果是,您是否对其进行了一些研究)谢谢!这让我发疯......:S
  • 是的,#2 是可能的,我现在将添加一个答案。

标签: testing protractor


【解决方案1】:

进一步考虑这一点,选项 1 是最佳解决方案,但并非总是可行。

方案2也是可以的,方案3应该避免。

对于选项二,可以像这样创建一个模拟模块:(coffeescript)

e2eInterceptors =->

  angular.module('e2eInterceptors', [])
  .factory('loginInterceptor', ()->
    response: (response)->
      # Only edit responses we are interested in
      return response unless response.match(/login/)
      # do the modifiations
      response.data.changePassword = true
      # return the response
      return response
  )
  .config(($httpProvider)->
    $httpProvider.interceptors.push('loginInterceptor')
  )

然后您可以使用

将此模块注入到您的测试中
browser.addMockModule('e2eInterceptors', e2eInterceptors)

如果您想在全局范围内执行此操作,可以将其放在量角器文件中的 onPrepare 函数中,否则只需在测试中需要时调用它即可。

【讨论】:

  • 我正在尝试使用这种方法,但是每当我添加一个模拟模块时,我的元素定位器突然告诉我在加载 dom 之前他们找不到任何元素。测试失败,selenium 在大约 1 秒后退出。
  • 听起来很混乱,不知道在哪里,可能是某个地方的拼写错误,可能在模块名称中。
  • 我得到了这些错误并修复了它们,然后它开始像那样失败。所以至少不是那些错误。
  • 嗯,你可能是对的,我不知道它是什么,但我重做了它,那个错误已经消失了。但是,似乎没有在 put 请求上调用拦截器。
  • 是的,嗯,我把它放在另一个文件中,export.e2einterceptor = function() { angular.module interceptor code here,但它没有被调用。如果您愿意提供帮助,这是我为它制作的另一个问题,我们将不胜感激。我正在尝试查看传递给请求的数据。 stackoverflow.com/questions/35088695/…
【解决方案2】:

我认为你的第一种方法是最合适的。

无论如何测试新用户创建都会很有用,所以这不是浪费。 例如,这个例子似乎是类似的:http://product.moveline.com/testing-angular-apps-end-to-end-with-protractor.html

【讨论】:

  • 实际上您提供的示例与您的答案不匹配。他们使用我的问题中的方法 3
  • 呃抱歉。我只读到“基本测试”部分,我认为这是相关的,但你是对的,“超越基础”部分是你提到的方法 3。
猜你喜欢
  • 2017-05-18
  • 2014-10-25
  • 2010-12-03
  • 2016-10-10
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
相关资源
最近更新 更多