30 javascript testing node.js angularjs protractor
我正在开发一个Webapp.它由两部分组成.节点休息服务器和angularjs客户端.
该应用程序采用以下方式构建:Rest服务器< - > Api模块< - > Angular App
该服务器目前已经过充分测试.我有单元测试和集成测试.集成测试正在访问一个真实的数据库并通过http调用其余的api.我认为这与服务器测试一样高.集成测试也运行得很快.我非常有信心我测试服务器的方式足以满足我的用例,我对结果感到满意.
然而,我正在努力如何测试angularjs应用程序.我对相关指令和模块进行了单元测试.写这些不是问题.
我想编写涵盖用户场景的集成测试.像注册场景:用户访问网站,转到注册表单,并提交带有数据的表单.
angularjs团队正在从ng场景转变为量角器.量角器正在使用Selenium来运行测试.因此,有两个范围:应用范围和测试范围.
现在我可以想到我可以使用的三种不同的抽象.而且我不确定哪一套最适合我.
在这种情况下,我不需要设置服务器.所有交互都在浏览器中运行
优点:
坏处:
我真的很喜欢这个解决方案,但我觉得很难嘲笑Api.需要在浏览器范围内修改Api.因此,我需要将测试中的修改发送到浏览器.这可以做到,但是我没有看到如何mockedApi.method.wasCalledOnce()在测试范围中运行断言
优点:
坏处:
我可以在nodejs中创建一个完整的Mock Rest服务器.量角器测试用nodejs编写,因此可以在测试中完成对服务器的控制.在我运行测试之前,我可以告诉服务器如何响应.像这样的东西:server.onRequest({method: 'GET', url: '/'}).respondWith('hello world')
然后我可以做断言 wasCalledOnce
每个测试都使用完整的服务器运行,并且可以向数据库添加元素.在每次测试之后,可以查看数据库中的预期元素
优点:
坏处:
我应该选择什么?你会怎么做?
这是一个很好的问题,与特定工具无关。我不得不在一个大型“绿地”(即从头开始)项目中面临同样的问题。
这里有一个词汇问题:“模拟”这个词到处都在使用,而你所谓的“集成测试”更多的是“完整的端到端自动化功能测试”。这里没有冒犯的意思,只是表述清楚有助于解决问题。
您实际上自己提出了正确的答案:#2 存根其余服务器。#1 是可行的,但很快就会变得难以开发和维护,#3 是一个很好的想法,但与 UI 测试和 UI 验证无关。
为了实现前端的高可靠性,独立于后端,只需存根其余服务器,即开发一个愚蠢的简单 REST 服务器,它将是幂等的,即始终对一个 http 请求回答相同的事情。保持幂等性原则将使开发和测试比任何其他选项都非常非常容易。
然后,对于一个测试,您只需检查屏幕上显示的内容(测试顶部)和发送到服务器的内容(测试底部),以便完整的 UI 堆栈仅测试一次。
这个问题的完整答案值得写一篇完整的博客文章,但我希望您能从我的建议中感受到该怎么做。
此致
| 归档时间: |
|
| 查看次数: |
10838 次 |
| 最近记录: |