我的背景不在于网络开发,所以我的术语可能不合适,道歉。
简而言之,我无法确定$httpBackend
在哪里提供数据。这个问题与寻找解决方案同样重要,因为它更好地了解$httpBackend
的工作原理。这里有更多细节。
我正在使用AngularJS创建单页面应用程序。作为播种机,我使用的是AngularJS"电话目录"来自他们网站的示例项目,使用npm和bower。
我将需要该应用程序访问一些RESTful Web服务,暂时我想要模拟。我遇到了ngMockE2E,我现在正在使用它。所以我现在正在加载devapp.js,而不是仅仅加载我的index.html中的主app.js,它有我的应用程序和ngMockE2E作为依赖项:
var devapp = angular.module('devapp', ['app', 'ngMockE2E']);
。
在devapp
内我模仿我的网络服务:
devapp.run(function($httpBackend) {
var items = [{{"id": 1, "price": 5}, {"id": 2, "price": 10}}];
$httpBackend.whenGET('/json/items').respond(items);
// let all other requests through to app
$httpBackend.whenGET(/^\w+.*/).passThrough();
});
现在,当我运行我的应用程序并构建向{json / items发送$http
次调用的服务时,一切正常。
但我想在实际的浏览器中看到输出。出于某种原因,我似乎无法找到网址!
当我转到localhost:8000/app/
时,我的index.html会启动,而我的部分地址的大多数地址都会显示为localhost:8000/app/#/login
,依此类推。但是我必须从哪里获取JSON形式的假$httpBackend
?
我尝试了localhost:8000/json/items
,它给了我"不可用",以及localhost:8000/app/#/json/items
或localhost:8000/app/json/items
,它们只是将我发送到我的index.html而没有加载部分内容,我已经尝试了我能想到的每一种组合。
答案 0 :(得分:1)
$httpBackend
的要点是假单位测试的HTTP后端。但是,你并没有真正尝试测试后端。目标是能够测试使用$http
服务的任何方法并返回虚假数据而不是真实服务器数据。
当Angular应用程序需要来自服务器的某些数据时,它会调用$ http服务,该服务使用$ httpBackend服务将请求发送到真实服务器。
基本上,$httpBackend.whenGET()
函数是$http
服务的一个钩子,在对服务器的任何调用进行处理之前会对其进行评估。每次使用$http
拨打电话时,如果它与您提供的路由规则匹配,它将被发送回假数据。这允许您像往常一样编写控制器,测试它们,然后删除假数据存根而不影响测试的控制器。
换句话说,$httpBackend
服务不处理任何路由,或直接返回任何数据,而是改变$http
响应其他模块的方式。为了验证您确实收到了假数据,您需要创建一个实际服务来响应将向该数据端点发出$http
请求的路由。