使用Angular mock为Backendless开发加载JSON文件

HP.*_*HP. 9 javascript ajax json angularjs angular-mock

我在单独的.js文件中为前端后端环境编写了这个小代码.myfile.json每当有一个ajax调用时我都需要得到/somelink.

angular.module('myApp')
.config(function($provide) {
  $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
})
.run(function($httpBackend, $http) {

  $httpBackend.whenGET('/somelink').respond(function(method, url, data) {
    $http({method: 'GET', url: '/somelink/myfile.json'})
    .success(function(data, status, headers, config) {
      return data;
    })
    .error(function(data, status, headers, config) {
    });

  });
});
Run Code Online (Sandbox Code Playgroud)

但是这段代码不起作用并且给了我错误:

Error: Unexpected request: GET /somelink/myfile.json
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

请注意,我不想直接调用$ http来获取代码中的.json文件,因为这会丢弃生产代码.这样做的目的是将此代码分别保留在后端开发中.

谢谢.

更新1:

我补充说:

$rootScope.$apply(); 
$httpBackend.flush();
Run Code Online (Sandbox Code Playgroud)

现在我还有另外一个错误: Uncaught Error: No pending request to flush !

更新2:

玩完之后,我发现了一个小黑客.我把它放在.run()所有其他$ httpBackend模拟之前.此.js文件也必须放在所有控制器/服务/指令之前和app.js引导程序之后.

  var data;

  $.ajax({
    type: 'GET',
    async: false,
    url: '/somelink/myfile.json'
  }).success(function(res) {
    data = res;
  }).error(function(data) {
  });
Run Code Online (Sandbox Code Playgroud)

然后这个:

$httpBackend.whenGET('/somelink').respond(data);
Run Code Online (Sandbox Code Playgroud)

关键是async: false要确保将JSON加载到变量中data.所有这些必须在其他对象触发并调用ajax事件之前发生.这只是前端后端开发的黑客攻击.生产时,当然会删除此.js文件.我不喜欢这么多是因为使用async: false和直接$.ajax()而不是$http

fus*_*ngs 8

以下为我工作没有任何黑客攻击

$httpBackend.whenGET('/endpoint').respond($resource("/path/to.json").query());

礼貌https://groups.google.com/d/msg/angular/grbwk-VehDE/UBIho6qcmLMJ

  • 你必须通过模拟服务传递/mockData.json.试试httpBackend.whenGET(/mockData.json /).passThrough(); (2认同)

Jak*_*son 2

我(和许多其他人)在使用 $httpBackend 进行测试时遇到了这个问题。我还没有将它用于无后端开发。测试中的解决方案是:

AngularJS 固执己见且饥渴难耐,因此要在测试中触发 $http 请求,您必须 $apply 或 $digest。

为了让 $http 在我的测试中工作,我必须

root.$apply(); 
httpBackend.flush();
Run Code Online (Sandbox Code Playgroud)

也许这样的事情会对你有帮助。