Angularjs 使用带有Karma的Parse SDK测试angular服务的最佳解决方案
我正在尝试自动测试Angular服务,这些服务碰巧通过Parse SDK调用Parse.com 我遇到的问题是,除非我明确地触发一个摘要周期,否则承诺不会得到解决,而我的服务是以这种方式完成的,我必须在我的服务实现中这样做,这是不可持续的 我的服务代码如下:Angularjs 使用带有Karma的Parse SDK测试angular服务的最佳解决方案,angularjs,parse-platform,jasmine,karma-jasmine,Angularjs,Parse Platform,Jasmine,Karma Jasmine,我正在尝试自动测试Angular服务,这些服务碰巧通过Parse SDK调用Parse.com 我遇到的问题是,除非我明确地触发一个摘要周期,否则承诺不会得到解决,而我的服务是以这种方式完成的,我必须在我的服务实现中这样做,这是不可持续的 我的服务代码如下: factory('myService', function($http, $q, $rootScope) { var myService = {}; myService.simplePromiseTest = function(
factory('myService', function($http, $q, $rootScope) {
var myService = {};
myService.simplePromiseTest = function() {
var p = $q.defer();
var query = new Parse.Query("AnyObjectInParse");
query.find().then(function(results){
p.resolve(results);
// *** I have to include that line for the jasmine test to run ***
$rootScope.$apply();
});
return p.promise;
}
}
return myService;
}
这是我的茉莉花测试
async.it('should resolve the promise', function(done) {
myService.simplePromiseTest().then(function(results) {
// this is never called if don't trigger the digest from the service code
done();
});
// This line is use less as when I get into that line, the promise is not resolved.
// $scope.$root.$digest();
});
因此,情况如下:
factory('myService', function($http, $q, $rootScope) {
var myService = {};
myService.simplePromiseTest = function() {
var p = $q.defer();
var query = new Parse.Query("AnyObjectInParse");
query.find().then(function(results){
p.resolve(results);
// *** I have to include that line for the jasmine test to run ***
$rootScope.$apply();
});
return p.promise;
}
}
return myService;
- 在触发摘要循环之前,我必须等待解析调用结束
- 除了用这个代码污染我的服务代码之外,我找不到其他解决方案
- 我想找到一个可持续的解决方案,它不需要我更新我的服务代码来通过测试
提前感谢,我对此感到困惑,我可能遗漏了一些明显的东西:-)调用
$rootScope.$apply()代码>在测试本身中,而不是在承诺实现中。完成的测试是异步的,因此可以在以后解决它。或者使用角度1.3
一般来说,对于测试承诺,我可能会推荐mocha而不是Jasmine,因为它支持带有return
语句的开箱即用的承诺测试 您好,Benjamin,看到注释行了吗?当我从测试内部调用$rootScope.$apply()时,它是在承诺得到解决之前调用的,因此没有任何效果。您使用的是Angulr的哪个版本?我实际上使用的是Ionic Framework,它似乎在我当前安装的版本中使用Angular 1.2。1.3在解决承诺方面是否应该表现出不同的行为?是的,确实如此。它不再需要$apply