我仍在尝试学习Jasmine并测试Angular服务。目前我正在尝试测试http.get的.success和错误调用。
服务电话
this.get = function (param1, param2) {
return $http.get('api/something/get/param1/param2')
.success(function (data) {
return data;
})
.error(function() {
return "Please select param1 AND param2";
});
};
茉莉花测试
it('service makes unsuccessful API call', function() {
var response = "This is the response";
httpBackend.when('GET', "api/something/Get/0/0").respond(404);
var data;
service.get(0, 0).then(function(result) {
data = result;
});
httpBackend.flush();
expect(data).toEqual("Please select param1 AND param2");
});
it('service makes successful API call', function () {
var response = "This is the response";
httpBackend.when('GET', "api/something/Get/0/0").respond(response);
var data;
service.get(0, 0).then(function(result) {
data = result.data;
});
httpBackend.flush();
expect(data).toEqual(response);
});
在第一个测试(错误)中,从不调用then()中的data = result.data行。在expect(data).toEqual()上,数据未定义。当我逐步浏览所有内容时,我会看到调用服务的位置,并在result.data中填充错误消息。
在第二个测试(成功)中,我看到了同样的事情,但是在调用then函数时设置了数据。
为什么我的then函数没有调用.error()?
答案 0 :(得分:0)
success()
和error()
与then()
的工作方式不同。回调返回的值将被忽略。 success()
和error()
会返回他们被调用的承诺,而不是像then()
这样的新承诺。
因此,它们的用法应限于仅具有副作用的回调(如初始化范围变量)。