在不模拟它们的情况下断言 $http 请求有效负载

Asserting $http request payloads without mocking them

我正在编写 Protractor 测试以验证在我们的应用程序中是否成功创建了报告。报告是通过对话框中一系列复杂的 UI 交互创建的,并通过对 REST API.

的 AJAX POST 请求保存。

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

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

有什么想法可以实现吗?

since subsequent protractor tests navigate to the report and perform additional checks

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

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

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