我正在尝试将网址与正则表达式匹配。但是后面的正则表达式并不匹配。
$httpBackend.whenGET('/^rest\/find-reservations\?.*/)').respond(function () {
return [200, ['succes'], {}];
});
我不断收到以下错误:
Error: Unexpected request: GET rest/find-reservations?end=1421424299193&reservationClass=Reservation&start=1358352299193
No more request expected
当我将正则表达式更改为绝对字符串'/ find-reservations'时,会触发whenGET。这是为什么?
编辑: 我在嘲笑后端。 http://plnkr.co/edit/VF4KbZO3FvngWQsiUcte?p=preview 以下plnkr适用于静态URL和部分。但它不适用于上述情况。
答案 0 :(得分:15)
如果你想匹配这个网址:
<强> “休息/找到的预约结束= 1421424299193&安培; reservationClass =预定&安培;开始= 1358352299193”强>
使用此代码:
$httpBackend.whenGET(/^rest\/find-reservations\?.*/).respond(function () {
return [200, ['success'], {}];
});
Error: Unexpected request:
可能出于某些原因:
$httpBackend.expectGET(url)
。expectGET
的顺序应与requests
的顺序相同。$httpBackend.verifyNoOutstandingExpectation()
之前致电$httpBackend.flush()
。它根本与$httpBackend.whenGET
无关。
请求期望提供了一种方法,可以对应用程序发出的请求进行断言,并为这些请求定义响应。 如果未作出预期请求或订单顺序错误,测试将失败
答案 1 :(得分:9)
您的代码存在两个问题:
将表达式括在'...'
中使其成为一个字符串(即使它看起来像正则表达式。
您必须在模式中包含前导/
。
您的代码应该像这样修改:
$httpBackend.whenGET(/^\/rest\/find-reservations\?.*/).respond(function () {
return [200, 'success', {}];
});
答案 2 :(得分:1)
this.httpBackend.whenGET(new RegExp('.*')).respond(function(){ return [200, 'MISS', {}] });
this.httpBackend.whenPOST('/report/').respond(function(){return [200, 'HIT', {}] ; });
this.httpBackend.whenPOST(new RegExp('.*')).respond(function(){ return [200, 'MISS', {}] });
var _received;
var result = this.reportService.save(new this.Report());
result.then(function(response){
_received = response.data;
});
this.httpBackend.flush();
expect(_received).toBe('HIT');
答案 3 :(得分:1)
我遇到了这个问题,但在我的情况下问题是正则表达式是用/ g全局标志创建的,我想分享我的答案,以防其他人因为我做的原因而偶然发现它。
虽然这不能回答这个问题,但我希望它对某些人有用:
简短版:
不要将/ g全局标志与httpBackend url匹配使用。
<强> TL; DR:强>
假设您有一个名为SomeService的服务,其中有一个名为someFunction的函数执行GET请求,请考虑以下测试,以证明全局标志对正则表达式的影响。
mount -o rw,remount,rw /system
mount -o rw,remount,rw /proc
chmod 666 /proc/meminfo
if [ ! -f /proc/meminfo ]; then
sed -i '6 i\echo "0,5120,10240,20480,40960,65536" >/sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211perf.sh
sed -i '6 i\echo "6144,12288,18432,32768,49152,57344" > /sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211ecoe.sh
sed -i '23 i\if [ $REPLY == '0,5120,10240,20480,40960,65536' ]; then' /system/0211/0211tr.sh
sed -i '27 i\elif [ $REPLY == '6144,12288,18432,32768,49152,57344' ]; then' /system/0211/0211tr.sh
else
head -n 1 /proc/meminfo | cut -d":" -f2 | sed '/s[kbKB ]//g' > /tmp/detecttram
if [ /tmp/detecttram -le 714752]; then
sed -i '6 i\echo "0,5120,10240,20480,40960,65536" > /sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211perf.sh
sed -i '6 i\echo "6144,12288,18432,32768,49152,57344" > /sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211ecoe.sh
sed -i '23 i\if [ $REPLY == '0,5120,10240,20480,40960,65536' ]; then' /system/0211/0211tr.sh
sed -i '27 i\elif [ $REPLY == '6144,12288,18432,32768,49152,57344' ]; then' /system/0211/0211tr.sh
else
sed -i '6 i\echo "0,6144,16384,32768,57344,76288" > /sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211perf.sh
sed -i '6 i\echo "8192,16384,32768,65536,98304" > /sys/module/lowmemorykiller/parameters/minfree' /system/0211/0211ecoe.sh
sed -i '23 i\if [ $REPLY == '0,6144,16384,32768,57344,76288' ]; then' /system/0211/0211tr.sh
sed -i '27 i\elif [ $REPLY == '8192,16384,32768,65536,98304' ]; then' /system/0211/0211tr.sh
fi
fi
chmod 444 /proc/meminfo