Javascript 是否记录了expectHEAD但未实施?
在我们的内部angularjs项目中,其中一个服务调用了我正在尝试测试的调用 对于测试,我使用的是Javascript 是否记录了expectHEAD但未实施?,javascript,angularjs,http,angularjs-http,http-head,Javascript,Angularjs,Http,Angularjs Http,Http Head,在我们的内部angularjs项目中,其中一个服务调用了我正在尝试测试的调用 对于测试,我使用的是角度模拟提供的。以下是相关代码: it('handle status code 200', inject(function ($httpBackend, ConnectionService) { spyOn(Math, 'random').andReturn(0.1234); httpBackend = $httpBackend; httpBackend.expectHEA
角度模拟提供的
。以下是相关代码:
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版本的一部分
最好的方法是什么
请注意,我必须继续使用angular,您可以自己添加更改: 这是第1523行angular-mocks.js中的一行更改:
1523: - angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) {
1523: + angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) {
不管怎样,由于您必须继续使用Angular的非当前版本,它在将来不会引起太多问题
编辑:回顾JoelJeske的答案,他提出了一个很好的观点——你可以很容易地做到这一点,而无需分叉。我对他的解决方案所做的一个改变是,不直接调用该方法
$httpBackend.expect('HEAD', 'ping?rand=1234').respond(200);
我将直接创建快捷方式方法:
$httpBackend.expectHEAD = function(url, headers) {
return $httpBackend.expect('HEAD', url, undefined, headers);
};
然后你可以做:
$httpBackend.expectHEAD('ping?rand=1234').respond(200);
与分叉和编辑库不同,使用底层方法将是更好的实践
$httpBackend.expect('HEAD', 'ping?rand=1234').respond(200);
另一个不能使用的方法只是一个快捷方式。使用此方法比更改库好得多,也更容易 很好的一点是,这是一个简单的改变。但是,您认为进行此更改的首选方式是什么:分叉角度模拟并使用分叉?非常感谢。分叉可能是最简单的方法,是的。决定接受乔尔的回答,但给你赏金。希望这对你来说是公平的。再次感谢你的帮助!谢谢你,为我工作,这绝对是一个更容易的选择。虽然我不太同意@dave的回答值得投反对票,但他仍然试图提供帮助,他的方法仍然合法;我取消了我的否决票,谢谢你取消了否决票。我接受了你的回答,因为你是第一个提出更简单的解决方案的人。对戴夫的额外努力给予了赏金。希望这对你来说是公平的。再次感谢。