$ q.all jasmine使用jasmine返回未定义的响应

时间:2015-10-05 03:27:56

标签: angularjs jasmine

我正面临一个问题,我正在为我的控制器编写测试用例。

 $q.all([
                staticDataService.getStaticData(viewType),
                driverService.getDrivers()
            ]).then(function (response) {
                vm.staticData = response[0];
                vm.drivers = response[1].drivers;

我的测试案例是

 beforeEach(inject(function ($rootScope, $q, _CONFIG_,$httpBackend, $controller) {
staticDataService = jasmine.createSpyObj('staticDataService', ['getStaticData','getDisplayRule']);
driverService = jasmine.createSpyObj('driverService',['getDrivers','setSecondaryDriverId','orderData','deleteSecondaryDriver']);
});

 staticDataService.getStaticData.and.callFake(function () {
            var d = q.defer();
            d.resolve(resultStaticData);
            return d.promise;
        });

        driverService.getDrivers.and.returnValue({ $promise: q.when(resultMakes) });
        driverUtilityService.calculateDriverAge.and.returnValue(2);

        DriversSummaryController.initialize();
        $rootScope.$apply();

但是当我调试我的测试用例时,我得到响应[0]和响应[1]为未定义。 请帮我纠正这个问题。

感谢。 Sajesh

1 个答案:

答案 0 :(得分:0)

设置间谍的语法是

spyOn(object, 'method').and.returnValue(...);

这涉及使用.and方法的所有语句。

$q.all在内部whenstaticDataService.getStaticDatadriverService.getDrivers可以使用已解决的值进行模拟,而不是承诺。