5

Tôi đã viết bài kiểm tra đối với một số thành phần kiễu góc, sử dụng một cú pháp mà tôi tìm thấy trên google một lúc trước:ý nghĩa của dấu gạch trên thuốc chích ở góc

describe('Directive: myDir', function() { 
    beforeEach(module('myApp')); 
    beforeEach(module('app/views/my_template.html')); 
    beforeEach(inject(function ($rootScope, _$compile_, $templateCache) { 
     $templateCache.put('views/my_template.html', $templateCache.get('app/views/my_template.html')); 

     var scope, $compile; 
     scope = $rootScope; 
     $compile = _$compile_; 
     element = angular.element("<div my-dir class='my-dir'></div>"); 
    })); 

    it('does things', function() { 
     $compile(element)(scope); 
     scope.$digest(); 
    }); 
}); 

Câu hỏi của tôi là cụ thể về việc tiêm _$compile_. Nó khác với chỉ $compile. Tại sao tôi cần phải làm theo cách này? Tại sao biên dịch $ được định nghĩa lại, tại sao tôi không thể biên dịch đơn giản với một biên dịch $ tôi nạp?

Trả lời

12

Từ (phần Test) Angular official tutorial:

Các injector lờ hàng đầu và dấu nhấn ở đây (ví dụ: $ httpBackend). Điều này cho phép chúng tôi tiêm một dịch vụ nhưng sau đó đính kèm nó vào một biến có cùng tên với dịch vụ.

Trong ví dụ của bạn, bạn có thể đổi tên biến $compile thành, giả sử, compile và sau đó xóa dấu gạch dưới khỏi tên thông số. Thực tế, bạn đã làm điều đó với scope vì vậy $rootScope vẫn không có dấu gạch dưới.

Cá nhân tôi muốn giữ tên của dịch vụ tích hợp sẵn trong các thử nghiệm của tôi để chúng có thể dễ dàng phát hiện khi lướt qua mã.

+0

https://docs.angularjs.org/api/ngMock/function/angular.mock.inject#resolving-references-underscore-wrapping- – gregjhogan

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