angularjs - модульный тест, невозможно вызвать фабричный метод

0

Мне сложно называть фабричный метод из теста модуляции кармы.

В нем говорится, что метод, который я пытаюсь вызвать (load()), не существует.

Здесь код:

unitTest.js

describe('Data Factory', function() {
  var DataFactory, scope, spy;

  beforeEach(module('App'));

  beforeEach(inject(function($injector, $rootScope, _ZoneData_) {
    var DataFromjson;
    scope = $rootScope.$new();
    DataFromjson = _ZoneData_;
    return spy = spyOn(DataFromjson, 'load');
  }));

  return it('Should Load the right data from the json file', function() {
    var test;
    test = DataFactory;
    console.log(test);
    return expect(DataFactory).toBeDefined();
  });
});

и здесь заводской код:

angular.module('services', ['ngResource']).factory('ZoneData', [
  '$http', '$stateParams', function($http, $stateParams) {
    var ZoneData;
    ZoneData = function(Data) {
      if (Data) {
        return this.setData(Data);
      }
    };
    ZoneData.prototype = {
      setData: function(Data) {
        return angular.extend(this, Data);
      },
      load: function(id) {
        var scope;
        scope = this;
        return $http.get('default-system.json').success(function(Data) {
          return scope.setData(Data.data);
        }).error(function(err) {
          return console.error(err);
        });
      },
      filtered: function() {
        var scope;
        scope = this;
        return $http.get('default-system.json').success(function(Data) {
          return angular.forEach(Data.data, function(item) {
            var urlZoneId;
            urlZoneId = parseInt($stateParams.zoneID);
            if (item.iID === urlZoneId) {
              return scope.setData(item);
            }
          });
        });
      }
    };
    return ZoneData;
  }
])

любая помощь с небольшим количеством объяснений будет действительно оценена. благодаря

  • 0
    Разве load () на самом деле не ZoneData.prototype.load (), а НЕ просто ZoneData.load ()?
  • 0
    как вы можете видеть, в моем тесте есть файл console.log, и это результат: function (Data) {if (Data) {return this.setData (Data); } если это поможет каким-либо образом}
Показать ещё 7 комментариев
Теги:
unit-testing
karma-jasmine
angularjs-factory

1 ответ

1
Лучший ответ

Это проблема с вашей заводской реализацией, а не с тестом. Предполагается, что фабрика в Angular возвратит объект, а то, что вы возвращаете, является функцией объекта-конструктора.

Легким решением было бы изменить возвращаемое значение вашей фабрики, чтобы

return new ZoneData();

вместо возвращения

return ZoneData;

Пожалуйста, проверьте этот plunkr http://plnkr.co/edit/O8wnmgSQ8mc9t93jKDJ6?p=preview. Я создал урезанную версию фабрики, чтобы продемонстрировать концепцию.

Благодарю.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню