Javascript $http是否对params对象进行排序?

Javascript $http是否对params对象进行排序?,javascript,angularjs,rest,unit-testing,http,Javascript,Angularjs,Rest,Unit Testing,Http,我正在为我的angularjs应用程序编写一些单元测试。对于测试,我使用内部$httpBackend模拟$http请求 在测试过程中,我使用$httpBackend.expectGET,因为我需要应用程序请求的确切行为 例如,我有一个Params对象: parameters = { name : 'Monkey', crazy : false, desc : 'Nobody', }; 我的应用程序中的Http Get请求是: retu

我正在为我的angularjs应用程序编写一些单元测试。对于测试,我使用内部$httpBackend模拟$http请求

在测试过程中,我使用$httpBackend.expectGET,因为我需要应用程序请求的确切行为

例如,我有一个Params对象:

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);
“query”只是带有“=”和“&”的对象concat的元素。 因此,我期望URL:

 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”进行排序

是,
$http
在将参数发送到服务器之前,根据

因此,您的测试应该需要有序密钥,或者您可以通过将其发送到提供程序来编写自己的paramSerializer:

paramSerializer-{string |函数(对象):string}-使用的函数 准备请求参数的字符串表示形式(指定为 一个物体)。指定为字符串,则将其解释为函数 在{$injector}中注册


试着在你的物体中移动它们,看看:)但目的是什么?对于服务器来说,它应该会起到作用,还是真的起作用了?服务器不应该在意,但我可以想象,这是为了在单元测试期间可以轻松地断言生成的params字符串。由于对象在JS中没有保证的顺序,因此最好确保密钥已排序谢谢,RGraham.:-)但这对我来说是非常意外的,那是为我排序参数。。。
forEachSorted(params, function(value, key) {
    ...
});