Заводское тестирование angularJS с использованием только автономного сервера jasmine

Я учусь писать тесты AngularJS, используя только автономный сервер jasmine. Однако мне удалось успешно протестировать контроллер, но у меня возникли проблемы с тестированием фабрики, которую я написал. Я получаю сообщение об ошибке, например

Error: [$injector:modulerr] 

(Заводской код) myservice.js:

mod.factory('WeatherService', function ($http) {
    return {
        testingdata: function () {
            return {name: "test", class: "ix"};
        }
};});

app.js

var mod = angular.module("myapp", []);

мой тест:

describe("ws", function () {
    describe('when I call WeatherService', function () {
        it('returns 1', function () {
            var t = {name: "test", class: "ix"};
            var $injector = angular.injector(['myapp']);
            var WeatherService= $injector.get('WeatherService');
            expect(WeatherService.testingdata).toEqual(t);
        });
    });
});

person c f    schedule 05.08.2015    source источник
comment
Прочтите документацию, чтобы правильно внедрить модули и провайдеры в Jasmine. Есть системная функция inject(), которая помогает   -  person Kirill Slatin    schedule 05.08.2015


Ответы (1)


Ваш тест излишне сложен.

Вы не используете angular.injector в тесте - вы можете использовать функцию модуля из ngMock

Точно так же вместо $injector.get вы можете использовать функцию инъекции из модуля ngMock.

describe("ws", function() {

  beforeEach(module('myapp'));

  describe('when I call WeatherService', function() {
    it('returns 1', inject(function(WeatherService) {
      var t = {
        name: "test",
        class: "ix"
      };

      expect(WeatherService.testingdata()).toEqual(t);
    }));
  });
});

вот рабочий пример http://plnkr.co/edit/doBJeWRyVyD75LfRP4G4?p=preview

person milanlempera    schedule 05.08.2015