1

我的背景不是网络开发,所以我的术语可能不正确,抱歉。

简而言之,我很难弄清楚在哪里$httpBackend提供数据。这个问题既是关于寻找修复的问题,也是关于更好地理解$httpBackend一般情况下的工作原理。这里有更多细节。

我正在使用 AngularJS 创建一个单页应用程序。作为播种者,我正在使用他们网站上的 AngularJS“电话目录”示例项目,该项目使用 npm 和 bower。

我将需要该应用程序来访问一些 RESTful Web 服务,目前我想模拟这些服务。我遇到了我现在正在使用的 ngMockE2E。因此,我现在不仅在我的 index.html 中加载主 app.js,还加载了 devapp.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();
});

现在,当我运行我的应用程序并构建$http向 /json/items 发送调用的服务时,一切正常。

但我想在我的实际浏览器中查看输出。由于某种原因,我似乎无法找到网址!

当我转到时,我的 index.html 就会启动localhost:8000/app/,并且我的部分地址的大多数地址看起来像localhost:8000/app/#/login等等。但是我必须去哪里获取我的假的 JSON 格式$httpBackend

我尝试localhost:8000/json/items了它给了我“不可用”和localhost:8000/app/#/json/itemsor localhost:8000/app/json/items,它只是将我发送到我的 index.html 没有加载任何部分,我已经尝试了我能想到的所有组合。

4

1 回答 1

1

重点$httpBackend是伪造 HTTP 后端进行单元测试。不过,您实际上并没有尝试测试后端。目标是能够测试任何使用该$http服务的方法并返回虚假数据而不是真实的服务器数据。

来自Angular.js 文档

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

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

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

于 2014-11-23T23:45:49.027 回答