Page 270 - AngularJS权威教程
P. 270
250 第 19 章 测试
第二种形式能让我们设置一个请求处理程序,请求成功执行之后会执行它。这种形式不返回
数据,它返回的是一个函数,能返回一个包含响应状态代码、响应数据和响应头的数组。
// ...
$httpBackend.expectGET("/v1/api/current_user")
// 响应一个200状态代码
// 还有主体“success”
.respond(function(method, url, data, headers) {
return [200, "DATA", {"header1": "Header1"}];
});
4. when
$httpBackend也有when方法,与expect方法不同,它压根就没有对请求创建预期。实际上,
它的目的主要是给应用创建一个假的后端,返回假数据。
不同于预期,使用when()时,每个匹配URL的请求都会被一条when定义处理。此外,用expect
时,响应不是必须的,但用when时响应必须有。
如果要建立对所有测试通用的后端定义,那么使用when()方法是非常棒的。(例如,当测试
一个使用了resolve属性的控制器时,它会依赖于外部数据的加载。)
when()函数带有两个必选参数和两个可选参数。
method:字符串HTTP方法,就像"GET"或者"POST"。
url:期望调用的HTTP URL。
data(可选):HTTP请求的主体,或者是个函数,接受一个data字符串并且在data符合
预期时返回true,或者是一个用JSON格式发送HTTP主体的JavaScript对象。
headers(可选):HTTP头或者函数,会接受header对象,并且在headers匹配预期时返
回true。
// ...
$httpBackend.when('GET', "/v1/api/current_user")
// 响应一个200状态代码
// 还有主体“success”
.respond(200, 'success');
类似于expect方法,我们也有同样的帮助方法让when的使用更具描述性。
whenGET()为GET方法创建了一个新的后端定义,whenGET()带有两个参数。
url:一个HTTP URL。
headers(可选):HTTP头。
// ...
$httpBackend.whenGET("/v1/api/current_user")
.respond(200, {userId: 123});
whenHEAD()为HEAD方法创建了一个新的后端定义,whenHEAD()带有两个参数。
url:一个HTTP URL。
headers(可选):HTTP头。
// ...
$httpBackend.whenHEAD("/v1/api/current_user")
.respond(200);