通过使用new function(url)
您的应用程序尝试从匿名函数实例化一个新对象,并将该新对象作为第一个参数传递$httpBackend.whenGET()
call.
当然,在打电话的时候whenGET()
没有提供 URL,因此它始终是未定义的。
您应该传递函数本身(而不是使用该函数实例化的对象)。例如。:
$httpBackend.whenGET(function (url) {
...
}).respond(users[id]);
UPDATE:
经过更多挖掘后发现,将函数作为第一个参数传递给whenGET
已在版本中添加1.3.0-beta.3。您正在阅读的文档可能指的是最新的测试版本,而您使用的是早期版本。
(请注意,即使版本 1.3.0-beta.1 和 2 也没有提供此选项。)
无需赘述,负责验证匹配的 URL 是MockHttpExpectation
's matchUrl
method:
function MockHttpExpectation(method, url, data, headers) {
...
this.matchUrl = function(u) {
if (!url) return true;
if (angular.isFunction(url.test)) return url.test(u);
if (angular.isFunction(url)) return url(u); // <<<<< this line does the trick
return url == u;
};
线路if (angular.isFunction(url)) return url(u);
是提供直接传递函数选项的选项,并在版本 1.3.0-beta.3 中添加(如前所述)。
但是,如果你仍然想将函数传递给以前的 AngularJS 版本,你可以通过提供一个带有test
method.
IE。代替:
.whenGET(function (url) {...})
with:
.whenGET({test: function (url) {...}})
另请参阅此简短的演示 http://jsfiddle.net/ExpertSystem/3YZ9N/.