在控制器构造函数中调用时,Jasmine模拟承诺解析不被处理

时间:2015-03-04 15:09:17

标签: angularjs unit-testing jasmine

在我的控制器构造函数中,许多私有变量被设置为从服务返回的promise的结果。

例如,在构造控制器时将调用它。

MyService
    .initializeDataForType(type)
    .then(function (data) {
        //never getting hit when testing
    });

并且服务调用被模拟为返回已解决的承诺。

var myService = jasmine.createSpyObj('page.MyService', [
    'initializeDataForType'
]);

beforeEach(inject(function ($controller, _$q_) {
    myService.initializeDataForType.and.callFake(function (type) {
        var deferred = _$q_.defer();
        deferred.resolve({});
        return deferred.promise;
    });

    target = $controller('page.MyController', {
        'page.MyService': myService 
    });
}));

永远不会达到服务调用的then()方法。似乎茉莉花没有等待并继续进行下一次测试。

1 个答案:

答案 0 :(得分:3)

您是否尝试在实例化控制器后添加$scope.$digest()?在jasmine测试中,您必须强制使用范围摘要周期,并且由于您将变量设置为promise的结果,因此需要在测试之前运行摘要周期以查看这些变量是否存在。