Jasmine,Parse.com& Promises:测试调用query.get / find的函数

时间:2015-11-17 15:22:19

标签: javascript unit-testing jasmine promise automated-tests

我正试图测试一个parse.com支持的数据服务,但到目前为止还没有找到令人满意的解决方案。基本上,我想使用karma / jasmine来测试返回promise的函数。 我正在监视query.get()方法,以拦截并返回在jasmine规范的实现中创建的对象。但是,当间谍返回本地对象时,不会执行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
      }
    });

  • jasmine spec

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":[]}'

我原以为退回的承诺已经解决了。

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

0 个答案:

没有答案