在控制器构造函数中调用时,Jasmine 模拟承诺解决未被处理
Jasmine mock promise resolve not being handled when called in controller construtor
在我的控制器构造函数中,许多私有变量被设置为来自服务的承诺 return 的结果。
例如controller构建时调用
MyService
.initializeDataForType(type)
.then(function (data) {
//never getting hit when testing
});
并且服务调用被模拟为 return 像这样已解决的承诺。
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()
方法。看来jasmine并没有等到下一个测试。
您是否尝试在实例化控制器后添加 $scope.$digest()
?在 jasmine 测试中,您必须强制范围摘要循环,并且由于您的变量是作为承诺的结果设置的,因此在测试这些变量是否存在之前,摘要循环需要 运行。
在我的控制器构造函数中,许多私有变量被设置为来自服务的承诺 return 的结果。
例如controller构建时调用
MyService
.initializeDataForType(type)
.then(function (data) {
//never getting hit when testing
});
并且服务调用被模拟为 return 像这样已解决的承诺。
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()
方法。看来jasmine并没有等到下一个测试。
您是否尝试在实例化控制器后添加 $scope.$digest()
?在 jasmine 测试中,您必须强制范围摘要循环,并且由于您的变量是作为承诺的结果设置的,因此在测试这些变量是否存在之前,摘要循环需要 运行。