如何在模拟e2e测试时检测API修改?

deo*_*lem 15 unit-testing mocking angularjs protractor e2e-testing

我想在我们团队的项目中建立一个坚实的e2e测试基础,但我找不到这个问题的简单解决方案:

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

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

例如,如果一个模拟假设/api/users/1返回null,如果用户不存在,当它实际上返回一个空对象,则虽然测试可以通过,被测试的行为依赖于不正确的假设,并且因此可以以意外的方式失败.

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

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

我在这里使用Angular 1.x和Protractor,但这并不依赖于技术.

Bor*_*rov 6

我认为你在做什么(测试期间的前端隔离)是正确的,保持这种方式.

你可以做些什么来验证你的模拟是其中之一:

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

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

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

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