我为angularjs应用程序编写了一些单元测试。对于测试,我使用内部$ httpBackend模拟$ http请求。
在测试期间,我使用$ httpBackend.expectGET,因为我想要我的应用程序请求的确切行为。
例如,我有一个Params-Object:
parameters = {
name : 'Monkey',
crazy : false,
desc : 'Nobody',
};
我的应用中的Http-Get请求是:
return $http.get(this.uri + '/' + id, {params : parameters});
在我的单元测试中,我希望如此:
$httpBackend.expectGET(instance.uri + '/' + returnValues.id + '?' + query).respond(200, object);
"查询"只是对象的元素与' ='和''。 所以我期待这个网址:
www.example.com/api/v1/object/1?name=Monkey&crazy=false&desc=Nobody
但我得到了这个:
www.example.com/api/v1/object/1?crazy=false&desc=Nobody&name=Monkey
$ http是否根据" params" 的对象中的键进行排序?
答案 0 :(得分:2)
是的,$http
根据source code
forEachSorted(params, function(value, key) {
...
});
因此,您的测试应该是有序的密钥,或者您可以通过将其发送给$http提供商来编写您自己的paramSerializer:
paramSerializer - {string | function(Object):string} - 使用的函数 准备请求参数的字符串表示(指定为 一个东西)。指定为字符串,它被解释为函数 使用{$ injector}注册。