我正试图试着测试一个parse.com支持的数据服务,但到目前为止还没有找到令人满意的解决方案 . 基本上,我想使用karma / jasmine来测试返回promise的函数 . 我正在监视query.get()方法,以拦截并返回在jasmine规范的实现中创建的对象 . 但是,当 Spy 返回本地对象时,不会执行query.get options参数的成功路径 . 相反,待测试函数直接返回未解决的承诺,这不是我想要的 . 基本上,我想测试数据服务的成功路径(和错误路径) .

这是代码:

  • 待测试parse.com数据服务
angular.module('app.services',[])
    .factory('AppServices',function(){
      var doFunction1 = function(){
        var promise = new Parse.Promise();
        var ParseObjectClass = Parse.Object.extend('ParseObject');
        var query = new Parse.Query(ParseObjectClass);
        query.get('abc1234',{
          success: function(result){
            promise.resolve(result);
          },
          error: function(result, error){
            promise.reject(error);
          }
        });
        return promise;
      }   

      return {
        function1: doFunction1
      }
    });
  • 茉莉花规格
describe('MyServices Tests', function() {
  var AppServices;
  var scope;

  beforeEach(function() {
    module('app.services');
  });

  beforeEach(inject(function($rootScope, AppServices) {
    AppServices = AppServices;
    scope = $rootScope.$new();

    Parse.initialize("key1", "key2");

    var user = new Parse.User({
      id: 'abc1234',
    });

    var ParseObjectClass = Parse.Object.extend('ParseObject');
    var obj1 = new ParseObjectClass({
      id: 'xyc789'
    });

    spyOn(Parse.Query.prototype, 'get')
      .and.callFake(function(options) {
        return Parse.Promise.as(obj1);
      });
  }));

  it('parseMockTest', function() {
    var result = AppServices.function1(2);
    console.log(JSON.stringify(result));
  });
});

这是业力日志的结果:

LOG: '{"_resolved":false,"_rejected":false,"_resolvedCallbacks":[],"_rejectedCallbacks":[]}'

我原本预计返回的承诺会得到解决 .

关于如何测试返回承诺的函数的任何想法/提示?