带有承诺的单元测试:如何模拟 $q 或知道已调用 deferred
Unit test with promises: How to mock $q or know deferred has been called
我有一项使用承诺的服务。这是我的服务的一个简化示例:
angular.module('myService').service('popup', [
'$q', function(
$q ) {
this.alert = function(myValue) {
var deferred = $q.defer();
if (myValue = 0) {
deferred.resolve('myValue is null');
} else {
deferred.reject('myValue isn\'t null');
}
return deferred.promise;
}
}]);
我想要这样的单元测试:
- 鉴于:我的价值= 0
- 时间:myService.alert()
- 那么:deferred.resolve已被调用
问题是,我知道因为 'deferred' 是我服务中的一个变量,所以我无法在我的单元测试中访问它(模拟它)。所以我需要模拟 $q,但我不知道该怎么做(我尝试了一些方法但没有成功)。
有人知道我如何模拟 $q 或者知道 deferred.resolve() 是否被调用了吗?
我不会嘲笑 $q,工作太多了。
我会做类似的事情:
it('Should be resolve when myValue is 0', function (){
//given myValue = 0
var myValue = 0;
// calling myService.alert
var promise = myService.alert(myValue);
var resolved = false;
promise.then(function (success){
resolved = true;
}, function (error){
});
//actually resolve the promise
$rootScope.$digest();
//expect promise to have been resolved
expect(resolved).toBe(true);
});
我有一项使用承诺的服务。这是我的服务的一个简化示例:
angular.module('myService').service('popup', [
'$q', function(
$q ) {
this.alert = function(myValue) {
var deferred = $q.defer();
if (myValue = 0) {
deferred.resolve('myValue is null');
} else {
deferred.reject('myValue isn\'t null');
}
return deferred.promise;
}
}]);
我想要这样的单元测试:
- 鉴于:我的价值= 0
- 时间:myService.alert()
- 那么:deferred.resolve已被调用
问题是,我知道因为 'deferred' 是我服务中的一个变量,所以我无法在我的单元测试中访问它(模拟它)。所以我需要模拟 $q,但我不知道该怎么做(我尝试了一些方法但没有成功)。
有人知道我如何模拟 $q 或者知道 deferred.resolve() 是否被调用了吗?
我不会嘲笑 $q,工作太多了。
我会做类似的事情:
it('Should be resolve when myValue is 0', function (){
//given myValue = 0
var myValue = 0;
// calling myService.alert
var promise = myService.alert(myValue);
var resolved = false;
promise.then(function (success){
resolved = true;
}, function (error){
});
//actually resolve the promise
$rootScope.$digest();
//expect promise to have been resolved
expect(resolved).toBe(true);
});