【问题标题】:Asserting $http request payloads without mocking them断言 $http 请求有效负载而不模拟它们
【发布时间】:2015-05-14 19:47:24
【问题描述】:

我正在编写量角器测试来验证在我们的应用程序中成功创建报告。报告是通过对话框中的一系列复杂 UI 交互创建的,并通过 AJAX POST 请求保存到 REST API。

我已经为模式中的复杂 UI 交互编写了测试,但我不知道如何在相同的量角器测试中测试 POST 请求。理想情况下,我希望能够对 POST 请求的有效负载进行断言,以验证 UI 是否正在向 API 发送正确的数据。

请务必注意,我不想模拟 HTTP 调用——我需要它通过,因为后续量角器测试会导航到报告并执行其他检查。我的第一个想法是以某种方式挂钩 $httpBackend.passThrough() 方法,但我没有成功。

任何想法如何做到这一点?

【问题讨论】:

  • 我不认为这是你需要使用protractor 的东西。而是对其进行单元测试。
  • @alecxe 您将如何对 UI 进行单元测试以确保它创建了正确的请求负载?我需要在这里进行功能/集成测试,以确保即使 CSS 更改也不会破坏功能。
  • 基于链接的 SO 问题,我需要使用类似 protractor-http-mock's requestsMade() 的东西。谢谢!

标签: angularjs protractor


【解决方案1】:

因为随后的量角器测试导航到报告并执行其他检查

如果您检查报告中是否包含与提交的匹配项的数据,尽管是间接的,但您正在测试 POST 是否成功通过。有一个合理的论点认为这对于 E2E 测试来说已经足够了:它测试应用程序的行为是否符合用户的期望。用户并不关心它是如何实现的:POST、websockets、信鸽;-)

请记住,此类测试的通常目的是让它们在出现问题时失败。如果 POST 未正确完成,则验证显示报告的后续测试将失败。

缺点是,与您设法测试 POST 相比,您获得的关于哪里出了问题的信息会少一些。但是,单元测试可以提供帮助。如果你有一个失败的单元测试来定位问题,你编写一个修复让它通过。如果您没有失败的单元测试,您可以通过调试来调查问题,添加突出显示问题的失败测试,​​并修复代码以使其通过。

【讨论】:

  • 巧合的是,我得出了同样的结论:功能测试不应该关心 POST 请求,而应该只测试 UI。我为 POST 请求添加了单独的单元测试。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多