2016-04-28 5 views
2

例えばジャスミンとRestangular.extendModelをテストする方法:Restangular extendModelジャスミン

コントローラー:

_this.populateSecurityGroups = function() { 
    var netid = _this.instance.vm_fields.cloud_network * 1; 
    CloudNetworksFactory.one(_this.provider, netid).then(
      function (net) { 
      net.security_groups(_this.provider).then(
       function (sgs) { _this.security_groups = sgs; }, 
       function (err) {} 
      ); 
      }, 
      function (err) {} 
    ); 
    }; 

工場:

var all = function (provider) { 
     return provider.getList('cloud_networks'); 
    }; 

    var one = function (provider, id) { 
     var defered = $q.defer(); 
     this.all(provider).then(
     function (nets) { 
      var res = _.find(nets.data, { id: id }); 
      defered.resolve(res); 
     }, 
     defered.reject 
    ); 
     return defered.promise; 
    }; 

    Restangular.extendModel('cloud_networks', function (model) { 
     model.security_groups = function (provider) { 
     var _this = this; 
     var defered = $q.defer(); 
     provider.security_groups().then(
      function (sgs) { 
      var res = ...     
      defered.resolve(res); 
      }, 
      defered.reject 
     ); 

     return defered.promise; 
     }; 

     return model; 
    }); 

私はこの機能をテストすることはできません、最初のエラーは:

未定義

未定義のは

これはの始まりです( 'e.security_groups' を評価)対象ではありません( ') "cloud_networks" をr.getListを(' 評価)コンストラクタではありません私のテスト、私はrestangular.extendModelを模擬することはできません。

it('should test populateCloudSubnets properly', function (done) { 
     ctrl.instance.vm_fields.cloud_network = 1; 
     ctrl.populateSecurityGroups().then(function(){ 
     .... 
     }, function(err){ 
     expect(err).toBe(null); 
     done(); 
     }); 

     $httpBackend.flush(); 
    }); 

答えて

0

は、ジャスミンとrestangular.extendModelをテストするには、あなたが使用する必要がありますRestangular.restangularizeElement

あなたが持っていることを例に取ると:

Restangular.extendModel('cloud_networks', function (model) { 
    model.security_groups = function() {} 
} 

あなたがこれを行うことができます:

it('does something' function() { 
    var model = {id: 1}; 
    Restangular.restangularizeElement(null, model, 'cloud_networks'); 

    // You can test model.security_groups() in here 
}