我正在尝试为我们的应用程序的登录过程编写一些端到端测试,但是我无法理解设置用户需要更改密码的方案的最佳方法。
当我们的服务器响应成功登录时,将返回带有changePassword
字段的用户对象。然后客户端检查响应并相应地重定向。
我的问题是设置测试以便设置changePassword
字段 - 最佳使用方法是什么?
我认为我的选择为:
为服务器设置测试设置和拆除脚本,专门为测试运行创建一个全新用户,并在数据库中设置changePassword
标志。
这似乎是最端到端方法,但可能也是最努力的方法。代码
以某种方式拦截测试中的http响应,并修改仅为此测试设置的changePassword
标志。
完全模拟http响应。使用这种方法是从端到端测试中删除最多的,但也许是最简单的?
哪种方法最好还是最常用?此外,如何实现上述(特别是 1 和 2 )与量角器的任何一般指针都会很棒 - 我发现它很难在概念上直截了当,因此很难知道要搜索什么。
我正在使用量角器作为测试框架, angular.js 为客户端供电,节点服务器正在运行(除其他外) express.js 和 mongoDB 。
答案 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