Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否记录了expectHEAD但未实施?_Javascript_Angularjs_Http_Angularjs Http_Http Head - Fatal编程技术网

Javascript 是否记录了expectHEAD但未实施?

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

在我们的内部angularjs项目中,其中一个服务调用了我正在尝试测试的调用

对于测试,我使用的是
角度模拟提供的
。以下是相关代码:

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问题:

据我所知,这意味着在angular Mock中确实没有
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的回答值得投反对票,但他仍然试图提供帮助,他的方法仍然合法;我取消了我的否决票,谢谢你取消了否决票。我接受了你的回答,因为你是第一个提出更简单的解决方案的人。对戴夫的额外努力给予了赏金。希望这对你来说是公平的。再次感谢。