2013-11-04 27 views
5

Trong một thử nghiệm đơn vị của tôi, tôi đang cố gắng để làm

beforeEach(function() { 
    angular.mock.inject(function ($injector) { 
     $httpBackend = $injector.get('$httpBackend'); 
     mockUserResource = $injector.get('User'); 
     $httpProvider = $injector.get('$httpProvider'); // <-- problem 
     $httpProvider.interceptors.push('myInterceptor'); 
    }); 
}); 

(demo)

Tại sao nó không thể tiêm $ httpProvider?

Lý do tôi làm điều này là vì tôi không tải tệp thêm tất cả các trình chặn của tôi, vì tôi muốn kiểm tra từng cái một!

+0

Top câu hỏi notch, ngắn gọn và dễ tìm kiếm! Tôi đã có vấn đề chính xác này. – Breedly

Trả lời

10

Nhà cung cấp chỉ được tiêm trong pha cấu hình, angular.config.

Theo this answer, bạn có thể thử một cái gì đó như:

beforeEach(module('yourModule', function($httpProvider) { 
    $httpProvider.interceptors.push('myInterceptor'); 
})); 

beforeEach(function() { 
    angular.mock.inject(function($injector) { 
    $httpBackend = $injector.get('$httpBackend'); 
    mockUserResource = $injector.get('User'); 
    }); 
}); 

Để biết thêm thông tin về cách phụ thuộc công trình tiêm, this là một bài viết tuyệt vời (không được viết bởi nhóm AngularJS)

1

Tên Provider được tự động thêm theo góc cạnh. Vì vậy, bạn chỉ cần tiêm $http.

$httpProvider = $injector.get('$http'); 

đây là working fork of your fiddle.

+0

Điều này là chính xác, chỉ muốn thêm bạn có thể muốn tránh các yêu cầu HTTP thực tế trong các bài kiểm tra đơn vị. –

+5

Tôi nghĩ rằng bạn quên rằng mình muốn cấu hình '$ httpProvider' bằng cách sử dụng các bộ chặn. Anh ta không tìm cách tiêm dịch vụ '$ http'. –

Các vấn đề liên quan