Eug*_*sky 16 angularjs angular-http httpbackend angularjs-http angular-mock
我使用Angular.js $httpBackend
来测试一些包装$http
调用的服务(这是在ngMock中,而不是 ngMockE2E).
看来,喜欢的东西expect
和when
对的URL查询参数的顺序是敏感的.例如,如果我这样做,$httpBackend.when('POST','/apiCall?X=1&Y=2').respond(/* ... */)
或者如果我在$httpBackend.expectPOST('/apiCall?X=1&Y=2')
URL中有Y = 2和X = 1而不是X = 1和Y = 2,则会出现URL不匹配.
我想以这样一种方式编写我的测试,即被测试的服务可以自由地更改URL查询字符串参数的顺序而不会破坏测试.我在$ httpBackend文档中找不到任何解决方法.这样做的正确方法是什么?
angular将对params
与$ http一起使用的对象的键进行排序.
$http({
url:"/myurl",
method:"GET",
params:{
Y:1
X:2
}});
Run Code Online (Sandbox Code Playgroud)
Angular将有效地执行以下操作:Object.keys(myParams).sort()
并按顺序附加键.最终成为'/myurl?X=2&Y=1'
我建议不要直接在url中使用查询参数,而是在params:
angular将处理的参数中.
另一种解决方案是在测试中使用正则表达式,例如
$httpBackend.expectPOST(/\/myurl\?((X|Y)=\d{1,}&?){2}/)
regexper
自文档重新设计以来,您可以使用RegExp的事实很难发现,因为颜色不会混合.
你可以使用$ httpParamSerializer服务来实现这个目的:
$httpParamSerializer({ param: 1, param2: 2 });
Run Code Online (Sandbox Code Playgroud)
这将返回一个匹配的字符串化查询字符串匹配angulars $ http服务与params.
归档时间: |
|
查看次数: |
5703 次 |
最近记录: |