AngualrJS,Karma,Jasmine - 如何编写一个调用$ q.all的服务函数的测试?

时间:2017-09-20 11:34:44

标签: angularjs unit-testing karma-jasmine

我有一个调用2个http网址的服务函数,然后一旦解析了这两个网址,就会在服务中设置一些数据。

E.g。

    function dataServicesCall() {
        var start = moment(dateDataModel.date).format('YYYYMMDD');
        var end = moment(dateDataModel.date).format('YYYYMMDD');

        var promises = [
            DataService.getClients(),
            DataService.getProjects(start, end)
        ];

        $q.all(promises)
            .then(function (response) {
                console.log(' a ');
                setItems(response[1]);
            })
            .catch(handleError);
    }

我在单元测试中所做的是模拟两个DataServices调用并尝试模拟响应。

fit('should get the data for the current day upon starting up', function() {

    var spy = spyOn(DataService, 'getProjects').and.callFake(function () {
        console.log(' == hi ');
        var deferred = $q.defer();
        deferred.resolve([]);
        return deferred.promise;
    });

    var spy1 = spyOn(DataService, 'getClients').and.callFake(function () {
        console.log(' hi ');
        var deferred = $q.defer();
        deferred.resolve([]);
        return deferred.promise;
    });

    myService.dataServicesCall();

    expect(spy).toHaveBeenCalled(); //ok
    expect(spy1).toHaveBeenCalled(); //ok

    expect(mService.items).toEqual([]); //not ok

});

问题是我的服务中从不调用$ q.all,并且从不调用setItems函数。我不知道如何完成这个单元测试。

0 个答案:

没有答案