AngularJS:我在哪里可以直接在浏览器中看到$ httpBackend响应?

时间:2014-11-23 23:18:39

标签: angularjs httpbackend

我的背景不在于网络开发,所以我的术语可能不合适,道歉。

简而言之,我无法确定$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/itemslocalhost:8000/app/json/items,它们只是将我发送到我的index.html而没有加载部分内容,我已经尝试了我能想到的每一种组合。

1 个答案:

答案 0 :(得分:1)

$httpBackend的要点是假单位测试的HTTP后端。但是,你并没有真正尝试测试后端。目标是能够测试使用$http服务的任何方法并返回虚假数据而不是真实服务器数据。

来自Angular.js Documentation

  

当Angular应用程序需要来自服务器的某些数据时,它会调用$ http服务,该服务使用$ httpBackend服务将请求发送到真实服务器。

基本上,$httpBackend.whenGET()函数是$http服务的一个钩子,在对服务器的任何调用进行处理之前会对其进行评估。每次使用$http拨打电话时,如果它与您提供的路由规则匹配,它将被发送回假数据。这允许您像往常一样编写控制器,测试它们,然后删除假数据存根而不影响测试的控制器。

换句话说,$httpBackend服务不处理任何路由,或直接返回任何数据,而是改变$http响应其他模块的方式。为了验证您确实收到了假数据,您需要创建一个实际服务来响应将向该数据端点发出$http请求的路由。