如何从angular的$ httpBackend返回文件内容?

时间:2014-01-11 01:38:07

标签: javascript angularjs angular-mock

我正在尝试以角度设置e2e测试套件,并且需要使用$ httpBackend返回预设响应。如果我能够返回文件内容,例如

,那就太好了
  $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
    return getContentOf("/somefile");
  });

我尝试使用$ http,这是

的内容
  $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
    return $http.get("/responses/phones.js");
  });

但它没有用,猜测angular不支持从$ httpBackend返回承诺?

我能做到的一种方法是引用带有应用程序加载响应的js文件,并将文件的内容分配给变量,但是能够按需加载数据会更好。

3 个答案:

答案 0 :(得分:31)

由于$ httpBackend不能与返回的promises一起使用,因此一种方法是同步获取数据。 $ http没有开箱即用的同步选项,所以你必须在没有它的情况下调用你的文件,如下所示:

$httpBackend.whenPOST('/phones').respond(function(method, url, data) {
  var request = new XMLHttpRequest();

  request.open('GET', '/responses/phones.js', false);
  request.send(null);

  return [request.status, request.response, {}];
});

答案 1 :(得分:6)

我遇到了同样的问题:

$httpBackend.whenPOST("some/url").respond(function(method, url, data) { 
    return $resource("path/to/your/json/file.json").get(); 
});

这显然需要angular-resource模块才能工作。

答案 2 :(得分:0)

$ httpBackend.whenPost返回一个requestHandler对象。

根据官方文件:

  

requestHandler(是)具有respond方法的对象,用于控制匹配请求的处理方式。

     
      
  • 回复 -
      {function([status,] data[, headers, statusText]) | function(function(method, url, data, headers)}
       - respond方法接受一组要返回的静态数据,或者一个可以返回包含响应状态(数字),响应数据(字符串),响应头(Object)和状态文本(字符串)的数组的函数。
  •   

来源: Angular Documentations

respond方法接受一组要返回的静态数据,或者一个可以返回包含响应状态(数字),响应数据(字符串)和响应头(Object)的数组的函数。

所以,你必须做这样的事情:

var response = 'content of somefile.js';
// OR var response = { foo : "bar" };
// OR var response = (actually consume content of somefile.js and set to response)

$httpBackend.whenPost('/phones').respond(response);