我正在尝试以角度设置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文件,并将文件的内容分配给变量,但是能够按需加载数据会更好。
答案 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)和状态文本(字符串)的数组的函数。
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);