在我们内部的 angularjs 项目中,其中一项服务$http.head()
调用了我正在尝试测试的调用。
为了测试,我使用了由angular-mocks
. 以下是相关代码:
it('handle status code 200', inject(function ($httpBackend, ConnectionService) {
spyOn(Math, 'random').andReturn(0.1234);
httpBackend = $httpBackend;
httpBackend.expectHEAD('ping?rand=1234').respond(200);
ConnectionService.sendRequest();
httpBackend.flush();
expect(ConnectionService.stats.packetsReceived).toEqual(5);
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
}));
运行测试结果出现如下错误:
PhantomJS 1.9.7 (Mac OS X) connection service tests sendRequest function handle status code 200
FAILED TypeError: 'undefined' is not a function (evaluating 'httpBackend.expectHEAD('ping?rand=1234')')
at /path/to/app/app-connection-service_test.js:66
at d (/path/to/app/bower_components/angular/angular.min.js:35)
at workFn (/path/to/app/bower_components/angular-mocks/angular-mocks.js:2159)
经过一番挖掘,我发现了相关的github问题:
据我了解,这意味着在角度模拟中确实没有expectHEAD()
方法 - 它已记录在案,但实际上,它还不是稳定角度发布的一部分。
最好的方法是什么?
请注意,我必须使用 angular <= 1.2,因为这个应用程序需要在 IE8 上运行(Angular 1.3 正在放弃对 IE8 的支持)。
我目前正在考虑的解决方法之一是替换head()
为get()
. 在这种情况下,我可以使用现有expectGET()
方法对其进行测试。但我不确定缺点。