Angularjs 模拟e2e测试时如何检测API修改? 我想在我们团队的项目中建立一个坚实的E2E测试基础,但是我找不到一个简单的解决方案:

Angularjs 模拟e2e测试时如何检测API修改? 我想在我们团队的项目中建立一个坚实的E2E测试基础,但是我找不到一个简单的解决方案:,angularjs,unit-testing,mocking,protractor,e2e-testing,Angularjs,Unit Testing,Mocking,Protractor,E2e Testing,模拟所有调用时,检测服务器返回的对象的实际模型是否已修改的最佳方法是什么? 你的测试仍然会通过,因为他们正在测试一个过时版本的模型,但应用程序可能已经损坏 例如,如果mock假设/api/users/1在用户不存在时返回null,则当它实际返回空对象时,尽管测试可能通过,但被测试的行为依赖于错误的假设,因此可能以意外的方式失败 或者后端以某种方式提供具有最新模型的静态json文件,而前端依赖于此 当然,这假设后端工作人员和前端工作人员是独立的团队 我在这里使用Angular 1.x和量角器,但这

模拟所有调用时,检测服务器返回的对象的实际模型是否已修改的最佳方法是什么?

你的测试仍然会通过,因为他们正在测试一个过时版本的模型,但应用程序可能已经损坏

例如,如果mock假设
/api/users/1
在用户不存在时返回
null
,则当它实际返回空对象时,尽管测试可能通过,但被测试的行为依赖于错误的假设,因此可能以意外的方式失败

或者后端以某种方式提供具有最新模型的静态json文件,而前端依赖于此

当然,这假设后端工作人员和前端工作人员是独立的团队

我在这里使用Angular 1.x和量角器,但这并不真正取决于技术。

您需要注册一个存储数据的 请求:
window.e2eHttp[request.url]=null,响应+响应错误:
window.e2eHttp[request.url]=结果

您可以使用量角器的角度模块系统在解决方案中插入或使用标志,
e2eService.isEnabled()
,以打开和关闭拦截器


然后在e2e测试中,您需要实现一个
browser.wait+browser.executeScript
,直到
window.e2eHttp[request.url]
有数据。它将始终具有角度http响应对象(http状态头、数据等)

我认为您所做的(测试期间的前端隔离)是正确的,请保持这种方式

您可以执行以下操作之一来验证模拟:

1) 如果前端和后端紧密耦合并一起开发-为后端添加一组单元测试以验证API响应。 这样,如果API中发生了变化,后端测试将失败,您将知道前端模拟也应该更新

在开发过程中,您可以定期甚至在每次代码更改时运行两组测试(e2e和后端单元测试)

2) 如果前端或多或少独立于后端,那么您需要进行一些集成测试,这些测试将在e2e测试之外运行。 它们应该执行对后端的实际HTTP请求,并将返回的数据结构与模拟进行比较。通过这种方式,您可以检测模拟过时的情况


第二种方法更可靠,但集成测试可能比后端单元测试慢,因此您只能在CI服务器上自动运行它们,而不能在本地开发期间运行。

与@Lablanc Meneses类似的解决方案是将每个调用的响应保存在JSON文件中。将响应保存在拦截器中,用于e2e测试,然后将保存的JSON文件用于e2e测试。只要运行api服务,JSON调用就会自动更新。这将需要运行所有服务一次,以便第一次存储模型,然后将其用于e2e测试。模型将在您运行更新的api后立即更新。您可以创建一个切换来停止为生产构建保存响应。

解决方案2看起来很有趣。我肯定在寻找一个解决方案,涉及尽可能少的后端。