lundi 10 avril 2017

Jasmine Angular Testing for OpenStack Horizon - code failing

Thanks in advance for reading this and any help you might be able to give!

I am working on writing tests for some Angular code but despite working on it for days I cannot for the life of me get it to pass the tests.

The code exists here http://ift.tt/2ny4x1c but I will go into more detail below:

I am writing tests for this particular piece of code: http://ift.tt/2pm1QMz

(function() {
  "use strict";

  angular.module('horizon.app.core.network_qos')
    .factory('horizon.app.core.network_qos.service', qosService);

  qosService.$inject = [
    '$filter',
    'horizon.app.core.openstack-service-api.neutron',
    'horizon.app.core.openstack-service-api.userSession'
  ];

  /*
  * @ngdoc factory
  * @name horizon.app.core.network_qos.service
  *
  * @description
  * This service provides functions that are used through the QoS
  * features.  These are primarily used in the module registrations
  * but do not need to be restricted to such use.  Each exposed function
  * is documented below.
  */
  function qosService($filter, neutron, userSession) {
    var version;

    return {
      getPolicyPromise: getPolicyPromise,
      getPoliciesPromise: getPoliciesPromise
    };

     /*
      * @ngdoc function
      * @name getPoliciesPromise
      * @description
      * Given filter/query parameters, returns a promise for the matching
      * policies.  This is used in displaying lists of policies.  In this case,
      * we need to modify the API's response by adding a composite value called
      * 'trackBy' to assist the display mechanism when updating rows.
      */
    function getPoliciesPromise(params) {
      return userSession.get().then(getQoSPolicies);

      function getQoSPolicies() {
        return neutron.getQoSPolicies(params).then(modifyResponse);
      }

      function modifyResponse(response) {
        return {data: {items: response.data.items.map(modifyQos)}};

        function modifyQos(policy) {
          policy.trackBy = policy.id;
          policy.apiVersion = version;
          policy.name = policy.name || policy.id;
          return policy;
        }
      }
    }

    /*
    * @ngdoc function
    * @name getPolicyPromise
    * @description
    * Given an id, returns a promise for the policy data.
    */
    function getPolicyPromise(identifier) {
      neutron.getVersion().then(setVersion);
      return neutron.getQosPolicy(identifier).then(modifyResponse);

      function modifyResponse(response) {
        response.data.apiVersion = version;
        return {data: response.data};
      }
    }
  }

})();

This is my current test file:

(function() {
  "use strict";

  describe('qosService', function() {
    var service, detailRoute;
    beforeEach(module('horizon.app.core.network_qos'));
    beforeEach(inject(function($injector) {
      service = $injector.get('horizon.app.core.network_qos.service');
      detailRoute = $injector.get('horizon.app.core.detailRoute');
    }));

    describe('getPoliciesPromise', function() {
      it("provides a promise that gets translated", inject(function($q, $injector) {
        var neutron = $injector.get('horizon.app.core.openstack-service-api.neutron');
        var session = $injector.get('horizon.app.core.openstack-service-api.userSession');
        var deferred = $q.defer();
        var deferredVersion = $q.defer();
        var deferredSession = $q.defer();
        spyOn(neutron, 'getQoSPolicies').and.returnValue(deferred.promise);
        spyOn(session, 'get').and.returnValue(deferredSession.promise);
        var result = service.getPoliciesPromise({});
      }));
    });

  });

})();

And my error log: http://ift.tt/2nxPk09

Many thank again for any help at all on this. It is driving me up the wall!

Aucun commentaire:

Enregistrer un commentaire