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

我试图在角度设置一个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");

});

的线,但它没有工作,你猜的角度不从$ httpBackend支持返回的承诺?

我可以做到这一点的一种方式是引用js文件,并在应用程序加载时给出响应,并将文件内容分配给变量,但能够按需加载数据会更好。

回答:

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

根据官方的文档:

requestHandler(是)与respond方法,其控制一个匹配请求是如何处理的对象。

  • 响应 -
    {function([status,] data[, headers, statusText]) | function(function(method, url, data, headers)}
    - respond方法采用一组静态数据要返回或函数可以返回包含响应状态(号码),响应数据(字符串),响应头的阵列(对象)和状态文本(字符串)。

源:​​

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);

回答:

因为$ httpBackend不退还承诺的工作,你可以做到这一点的方法之一是同步您的数据。 $ 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, {}];

});

回答:

我有我解决了同样的问题:

$httpBackend.whenPOST("some/url").respond(function(method, url, data) { 

return $resource("path/to/your/json/file.json").get();

});

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

以上是 如何从angular的$ httpBackend返回文件内容? 的全部内容, 来源链接: utcz.com/qa/257843.html

回到顶部