편집
보인다. 내가 제대로 문제를 이해한다면 당신이 할 수
http://plnkr.co/edit/mHI19j6FDtV8UElRWvUs?p=preview
http://plnkr.co/edit/lZg8eQdoQRNtqedcr2UU?p=preview
한 가지, 컨트롤러와 모듈이 추적 서비스에 따라, 그리고에 그 의존성을 넣어하지 않는 것입니다 앱 수준에서 그런 다음 테스트에서 조롱 된 버전이 명시된 모듈을 명시 적으로로드하십시오. 그래서 같은
:
var core = angular.module('core', []);
var analytics = angular.module('analytics', []);
var app = angular.module('plunker', ['analytics', 'core']);
var mockAnalytics = angular.module('mockAnalytics', []);
core.controller('MainCtrl', function($scope, tracker) {
$scope.track = tracker.track();
});
analytics.factory('tracker', function() {
var service = {};
service.track = function() {
return "I'm real";
}
return service;
});
mockAnalytics.factory('tracker', function() {
var service = {};
service.track = function() {
return "I'm a mock";
}
return service;
});
테스트 :
describe('Testing a controller', function() {
var $scope = null;
var ctrl = null;
beforeEach(module('core'));
beforeEach(module('mockAnalytics'));
beforeEach(inject(function($rootScope, $controller) {
$scope = $rootScope.$new();
ctrl = $controller('MainCtrl', {
$scope: $scope
});
}));
it('should have its $scope.track == "I\'m a mock"', function() {
expect($scope.track).toEqual("I'm a mock");
});
});
음침한 좋은, 즉 ngMock가하는 일에 아주 가까이 있습니다. 'core '가'analytics'에 의존 할 가능성이 높기 때문에'mockAnalytics'를 명시 적으로 포함하지 않을 것입니다. 대신 테스트 모드에 자동으로 포함 된 myAppMocks 모듈을 가져와 오버라이드 값으로 제공해야합니다. – eddiec
아. 글쎄, 나는 그것을 시도하고 그것이 작동하는 것처럼 보였다. 내 편집을 확인하십시오. 너가 원하는게 그거야? –