Тестирование сервисов AngularJS с Karma и Jasmine

#javascript #angularjs #jasmine #karma-jasmine

#javascript #angularjs #jasmine #karma-jasmine

Вопрос:

Хорошо … я потратил почти 3 часа, пытаясь разобраться в этом. Я продолжаю получать

Ошибка ссылки: не удается найти переменную: module

при попытке запустить мой тест karma. Я прочитал другие связанные вопросы и правильно упорядочил файлы, но я все еще получаю эту ошибку. Хотя я думаю, что нужная мне модульная функция исходит от angular.mock.js файл, но оказывается, что «inject» также был определен в этом файле, и на него ссылаются, как и должно быть.

вот несколько важных фрагментов, которые лучше покажут мою ситуацию

karma.conf.js

 // list of files / patterns to load in the browser
      files: [
          'public/vendor/angular-1.2.0-rc2.js',
          'public/vendor/angular-test.js',
          'public/vendor/jasmine-helpers.js',
          'public/vendor/angular.mocks.js',
          'public/lib/**/*.js',
          'public/lib/*.js',
          'tests/*Spec.js'
      ],
  

файл спецификации

 describe("In the Weather Service Module", function(){

    var YWS, scope, mockWeatherService;

    beforeEach(angular.mock.module('NPWeatherWidget'));

    beforeEach(inject(function($rootScope,_YahooWeatherService_){
        YWS = _YahooWeatherService_;
        scope = $rootScope;
        mockWeatherService = jasmine.createSpyObj('YahooWeatherService',['getwoeid','getData']);
        module(function($provide){
            $provide.value("YahooWeatherService",mockWeatherService);
        })
    }));

    //utility tests
    it("Object should be converted to query string", function(){
        console.log({name:"larry",age:20}.paramify());
        expect({name:"larry",age:20}.paramify()).toBe("name=larryamp;age=20");
    })
    it("should be converted to a query string", function(){
        expect(YWS).toBeDefined();
    });
    it("GetWoeID should return a bunch of objects with woeid included",function(done){
        expect({}).toBeDefined();
    });


});
  

Любая форма указателя в правильном направлении будет очень оценена.

Комментарии:

1. Вместо того, чтобы angular.mock.module('NPWeatherWidget') просто попробовать module('NPWeatherWidget') свой beforeEach метод.

2. Спасибо @adamK, оказывается, реальная проблема заключалась в том, что я использовал несовместимые версии между моими angular-mock.js и мой фактический файл angular. Когда я нашел правильный angular-mock.js файл для angular 1.2.0-rc2 от code.angularjs.org проблема исчезла