2013-06-13 1 views
3

Попытка получить некоторые тесты единиц в AngularJS (с использованием жасмина & karma) работает и пытается понять зависимость впрыска ... текущее сообщение об ошибке в карма читает «Ошибка: аргумент« fn »не функция, есть строка»

app.js

angular.module('App', [ 'App.Services', 'App.Controllers', 'App.Directives']); 

controller.js

angular.module('App.Controllers', []). 
controller('MarketplaceCtrl', function ($scope, apiCall) { 
    apiCall.query({ 
     type: 'engagement', 
     engagement_status__in: '0,1' 
    }, function(data) { 
     var engagements = {}; 
     $.each(data.objects, function (i, engagement) { 
      engagements[engagement.lawyer_id] = engagement 
     }); 
     $scope.engagements = engagements; 
    }); 
}); 

services.js

angular.module('App.Services', ['ngResource']). 
factory('apiCall', function ($resource) { 
    return $resource('/api/v1/:type', 
     {type: '@type'}, 
     { 
      query: { 
       method: 'GET', 
       isArray: false 
      } 
     } 
    ); 
}); 

controllerSpec.js

describe('controllers', function() { 

    beforeEach(
     module('App', ['App.Controllers', 'App.Directives', 'App.Services']) 
    ); 

    describe('MarketplaceCtrl', function() { 
     var scope, ctrl, $httpBackend; 

     beforeEach(inject(function (_$httpBackend_, $rootScope, $controller) { 
      $httpBackend = _$httpBackend_; 
      $httpBackend.expectGET('/api/v1/engagement?engagement_status__in=0,1'). 
       respond([]); 
      scope = $rootScope.$new(); 
      /* Why is MarketplaceCtrl not working? :(*/ 
      ctrl = $controller('MarketplaceCtrl', {$scope: scope}); 
     })); 

     it('should have a MarketplaceCtrl controller', (function() { 
      expect(ctrl).not.to.equal(null); 
     })); 
    }); 
}); 
+0

я бегу в ту же ошибку. Я пишу тесты для контроллера. Это находится в собственном файле. Поэтому я включаю скрипт контроллера в тестовую страницу теста жасмина. Так что я требую, чтобы 'app.js' также включался в то же самое для написания тестов на мой контроллер? Не могли бы вы также включить скрипты, которые вы включили для написания тестов – Deeptechtons

ответ

3

Законченное используя этот пример https://github.com/tebriel/angular-seed/commit/b653ce8e642ebd3e2978d5404db81897edc88bcb#commitcomment-3416223

В основном:

describe('controllers', function(){ 
    beforeEach(module('myApp.controllers')); 

    it('should ....', inject(function($controller) { 
     //spec body 
     var myCtrl1 = $controller('MyCtrl1'); 
     expect(myCtrl1).toBeDefined(); 
    })); 

    it('should ....', inject(function($controller) { 
     //spec body 
     var myCtrl2 = $controller('MyCtrl2'); 
     expect(myCtrl2).toBeDefined(); 
    })); 
});