$ http.get()。error()不调用.then()回调

时间:2015-04-27 16:10:20

标签: angularjs unit-testing jasmine

我仍在尝试学习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()?

1 个答案:

答案 0 :(得分:0)

success()error()then()的工作方式不同。回调返回的值将被忽略。 success()error()会返回他们被调用的承诺,而不是像then()这样的新承诺。

因此,它们的用法应限于仅具有副作用的回调(如初始化范围变量)。