return 承诺使用 Jasmine 2.4 测试服务。*
Testing services that return promises using Jasmine 2.4.*
我在测试 Jasmine 中的 return promises 函数时遇到了一些问题。此解决方案非常接近我遇到的问题:How to resolve promises in AngularJS, Jasmine 2.0 when there is no $scope to force a digest?
post 是 2014 年的,不清楚他们使用的是哪个版本的 jasmine。这仍然是测试解决当前 (2.4.0^) 版本中承诺的函数的正确原因吗?
编辑:
我有一个模式看起来像这样的服务:
angular.module('somemodule').factory('listOfDependencies','NewService');
function NewService(listOfDependencies){
var getObject = function(para1, para2,...,paraN){
var deferred = $q.defer();
if(someDependency.method())
deferred.resolve(someDependency.get(key));
else
deferred.resolve(returnsNewObject);
// there's also a case that returns deferred.reject(reason);
return deferred.promise;
};
return getObject:getObject;
};
在我的规范中,测试目前看起来像这样
it('should return the object', inject(function() {
var obj = { some: Object };
NewService.getObject('param1'...'paramN').then(
function(data){
expect(data.obj).toEqual(obj);
},
function(response){
//promise failed
});
现在,我希望根据对象 'obj' return 编辑的内容应该通过了。在我的服务中,这种情况在逻辑上应该 return"
if(someDependency.method())
deferred.resolve(someDependency.get(key));
问题是它 return 的对象是:
else
deferred.resolve(returnsNewObject);
代码中的逻辑或其任何依赖项都没有错(我把所有这些都拆开并测试了很多次)所以我觉得 jasmine 规范中的语法(?)有问题或者我'只是没有正确测试承诺。感谢您看一看!
解析 promise,然后检查它解析的值是否有效和预期,这绝对是一种方法。
如果您可以使用 Chai 库,它会更简洁:
http://chaijs.com/plugins/chai-as-promised/
为了使您的代码更容易进行单元测试,请尝试在 Angular 服务中(而不是在控制器中)完成尽可能多的繁重工作,并让服务 return 承诺.这样,您的单元测试就可以调用具有各种输入的服务方法,并确保承诺 rejected/resolved 符合预期。
我通过调用 $rootScope.$apply(); 解决了这个问题;在我的测试结束时。
我在测试 Jasmine 中的 return promises 函数时遇到了一些问题。此解决方案非常接近我遇到的问题:How to resolve promises in AngularJS, Jasmine 2.0 when there is no $scope to force a digest?
post 是 2014 年的,不清楚他们使用的是哪个版本的 jasmine。这仍然是测试解决当前 (2.4.0^) 版本中承诺的函数的正确原因吗?
编辑:
我有一个模式看起来像这样的服务:
angular.module('somemodule').factory('listOfDependencies','NewService');
function NewService(listOfDependencies){
var getObject = function(para1, para2,...,paraN){
var deferred = $q.defer();
if(someDependency.method())
deferred.resolve(someDependency.get(key));
else
deferred.resolve(returnsNewObject);
// there's also a case that returns deferred.reject(reason);
return deferred.promise;
};
return getObject:getObject;
};
在我的规范中,测试目前看起来像这样
it('should return the object', inject(function() {
var obj = { some: Object };
NewService.getObject('param1'...'paramN').then(
function(data){
expect(data.obj).toEqual(obj);
},
function(response){
//promise failed
});
现在,我希望根据对象 'obj' return 编辑的内容应该通过了。在我的服务中,这种情况在逻辑上应该 return"
if(someDependency.method())
deferred.resolve(someDependency.get(key));
问题是它 return 的对象是:
else
deferred.resolve(returnsNewObject);
代码中的逻辑或其任何依赖项都没有错(我把所有这些都拆开并测试了很多次)所以我觉得 jasmine 规范中的语法(?)有问题或者我'只是没有正确测试承诺。感谢您看一看!
解析 promise,然后检查它解析的值是否有效和预期,这绝对是一种方法。
如果您可以使用 Chai 库,它会更简洁: http://chaijs.com/plugins/chai-as-promised/
为了使您的代码更容易进行单元测试,请尝试在 Angular 服务中(而不是在控制器中)完成尽可能多的繁重工作,并让服务 return 承诺.这样,您的单元测试就可以调用具有各种输入的服务方法,并确保承诺 rejected/resolved 符合预期。
我通过调用 $rootScope.$apply(); 解决了这个问题;在我的测试结束时。