在我的控制器构造函数中,许多私有变量被设置为从服务返回的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()
方法。似乎茉莉花没有等待并继续进行下一次测试。
答案 0 :(得分:3)
您是否尝试在实例化控制器后添加$scope.$digest()
?在jasmine测试中,您必须强制使用范围摘要周期,并且由于您将变量设置为promise的结果,因此需要在测试之前运行摘要周期以查看这些变量是否存在。