我被指派设置一些“集成测试”(不是“单元测试”或“UI测试”[又名E2E / Protractor])。这个集成测试仅测试控制器的$http POST请求到外部API,并检查预期的响应情况。
我试过这个: -没有ngMock(应直接连接到http资源); -使用ngMock(无法通过http资源,因为passThrough()未定义); -最后尝试了ngMockE2E,passThrough()据说有效,但请求既没有返回success()也没有error()。
我尝试了$ httpBackend.flush(),它说“没有要刷新的请求!”(因为它使用passThrough()我假设不需要flush函数)。
我尝试了$rootScope.$apply(),但没有任何区别。
不确定如何按预期工作,即使不使用Protractor也可能吗…?有人甚至为AngularJS应用程序进行“集成测试”吗?看起来标准是“单元测试”和“E2E测试”,而不是“集成测试”。
我设置的“单元测试”使用模拟资源,并调用了预期的success()和error()。
想法/建议?
[编辑:]找到问题与Jasmine异步测试有关。在Jasmine 1.X中,您需要使用run()和waitsFor(),在Jasmine 2.X中,您可以使用done()(尽管我无法使2.X工作,它只是破坏了所有我的测试)。所以现在我收到来自$http请求的回调,但总是调用error()。现在我不知道为什么不调用success()。有什么想法吗?
我试过这个: -没有ngMock(应直接连接到http资源); -使用ngMock(无法通过http资源,因为passThrough()未定义); -最后尝试了ngMockE2E,passThrough()据说有效,但请求既没有返回success()也没有error()。
我尝试了$ httpBackend.flush(),它说“没有要刷新的请求!”(因为它使用passThrough()我假设不需要flush函数)。
我尝试了$rootScope.$apply(),但没有任何区别。
不确定如何按预期工作,即使不使用Protractor也可能吗…?有人甚至为AngularJS应用程序进行“集成测试”吗?看起来标准是“单元测试”和“E2E测试”,而不是“集成测试”。
我设置的“单元测试”使用模拟资源,并调用了预期的success()和error()。
想法/建议?
[编辑:]找到问题与Jasmine异步测试有关。在Jasmine 1.X中,您需要使用run()和waitsFor(),在Jasmine 2.X中,您可以使用done()(尽管我无法使2.X工作,它只是破坏了所有我的测试)。所以现在我收到来自$http请求的回调,但总是调用error()。现在我不知道为什么不调用success()。有什么想法吗?
console.log('hello');
,它从未被触发。然而,当我使用模拟的 $http 请求运行我的“单元测试”时,那些“hello”消息立即出现。因此,由于某种原因,执行真正的请求从未触发成功/错误回调,这意味着我无法测试来自服务器的响应情况。 - BuildTester1ngMockE2E
或ngMidwayTester
。虽然我还需要解决一系列其他问题,但我现在已经成功了(请参见答案)。 - BuildTester1