修改量角器测试中的http响应

时间:2014-10-22 11:25:17

标签: testing protractor

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

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

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

我认为我的选择为:

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

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

  2. 以某种方式拦截测试中的http响应,并修改仅为此测试设置的changePassword标志。

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

  4. 哪种方法最好还是最常用?此外,如何实现上述(特别是 1 2 )与量角器的任何一般指针都会很棒 - 我发现它很难在概念上直截​​了当,因此很难知道要搜索什么。

    我正在使用量角器作为测试框架, angular.js 为客户端供电,节点服务器正在运行(除其他外) express.js mongoDB

2 个答案:

答案 0 :(得分:5)

进一步考虑后,选项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函数中,否则只需在测试中需要时调用它。

答案 1 :(得分:1)

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

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