example angularjs angular-http angularjs-http httpbackend angular-mock

angularjs - example - ¿Cómo puedo hacer que $ httpBackend sea insensible al orden de los parámetros de consulta de URL?



angularjs $http post json example (2)

Estoy usando Angular.js $httpBackend para probar algunos servicios que envuelven $http llamadas $http (esto está en ngMock, no ngMockE2E).

Parece que cosas como expect y when son sensibles al orden de los parámetros de consulta de URL. Por ejemplo, si hago $httpBackend.when(''POST'',''/apiCall?X=1&Y=2'').respond(/* ... */) $httpBackend.expectPOST(''/apiCall?X=1&Y=2'') $httpBackend.when(''POST'',''/apiCall?X=1&Y=2'').respond(/* ... */) o $httpBackend.expectPOST(''/apiCall?X=1&Y=2'') , Obtengo discrepancias de URL si tengo Y = 2 & X = 1 en la URL en lugar de X = 1 & Y = 2 .

Quiero escribir mis pruebas de tal manera que el servicio que se está probando pueda cambiar el orden de los parámetros de la cadena de consulta de URL sin romper las pruebas. No he podido encontrar nada para resolver esto en la documentación de $ httpBackend. ¿Cuál es la forma correcta de hacer esto?


angular ordenará las claves del objeto params utilizado junto con $ http.

$http({ url:"/myurl", method:"GET", params:{ Y:1 X:2 }});

Angular hará lo siguiente de manera efectiva: Object.keys(myParams).sort() y Object.keys(myParams).sort() las claves en ese orden. que termina siendo ''/myurl?X=2&Y=1''

Yo sugeriría usar parámetros de consulta no directamente en la url, sino en los parámetros de parámetros params: ese angular luego se procesará.

Otra solución sería utilizar expresiones regulares en sus pruebas, algo como

$httpBackend.expectPOST(///myurl/?((X|Y)=/d{1,}&?){2}/) regexper

El hecho de que pueda usar RegExp es realmente difícil de detectar desde el rediseño de la documentación, ya que los colores no se mezclan.


puede utilizar el servicio $ httpParamSerializer para lograr esto:

$httpParamSerializer({ param: 1, param2: 2 });

Esto le devolverá una cadena de consulta stringificada coincidente con angulares $ servicio con parámetros.