如何从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