2014-07-14 14 views
5

Tôi đang cố gắng thiết lập thử nghiệm đơn vị với Angular và đã nhấn một chút tường với việc tiêm vào cấu hình mức module và các phương thức chạy.Làm thế nào để giả lập các nhà cung cấp/cấu hình trong cấu hình module để kiểm tra đơn vị

Ví dụ, nếu tôi có một định nghĩa mô-đun như vậy:

angular.module('foo', ['ngRoute', 'angular-loading-bar', 'ui.bootstrap']).config(function ($routeProvider, $locationProvider, datepickerConfig, datepickerPopupConfig) { 

Karma hét lên với tôi bởi vì tôi không chế giễu đúng $ routeProvider, datepickerConfig, vv với những điều sau:

Error: [$injector:modulerr] Failed to instantiate module foo due to: 
Error: [$injector:unpr] Unknown provider: $routeProvider 

(và sau đó nếu tôi xóa $ routeProvider thì nó cho biết Nhà cung cấp không xác định: datepickerConfig và cứ thế)

Tôi cũng có mã sau đây trong một beforeEach:

angular.mock.module('foo'); 
angular.mock.module('ngRoute'); 
angular.mock.module('ui.bootstrap'); 

Và sau trong karma.conf.js tôi:

'components/angular/angular.js', 
    'components/angular/angular-mocks.js', 
    'components/angular/angular-route.js', 
    'components/angular-ui/ui-bootstrap-tpls.js', 
    'app/*.js', // app code 
    'app/**/*.js', 
    'app/**/**/*.js', 
    'test/app/*.js', // app.js 
    'test/specs/*.js', // angular.mock.module calls 
    'test/**/*.js', // tests 
    'test/**/**/*.js' 

Cảm ơn bạn cho bất kỳ lời khuyên.

+0

Bạn có tìm ra cách giải quyết vấn đề này không. Làm thế nào để có được ui-router chế giễu? Vui lòng cập nhật câu hỏi và thêm câu trả lời nếu bạn có thể giải quyết. – aksinghdce

Trả lời

1

Đảm bảo bao gồm mô-đun angular-route và tất cả các phụ thuộc của bạn vào mảng flies của karma.conf.js. Điều đó sẽ làm các trick.

+0

Tôi đã chỉnh sửa câu hỏi ở trên - Tôi có những câu hỏi bao gồm trong karma.conf.js của mình! –

+1

Chỉ cần một sidenote, tất cả mọi thứ hoạt động tốt khi tôi loại bỏ các phụ thuộc cho $ routeProvider, datepickerConfig và datepickerPopupConfig từ khối module.config của tôi nhưng rõ ràng là tôi không muốn phải rời khỏi đó trong thử nghiệm. –

0

Tôi cũng có đoạn mã sau vào một beforeEach:

angular.mock.module('foo'); 
angular.mock.module('ngRoute'); 
angular.mock.module('ui.bootstrap'); 

Tôi không nghĩ rằng bạn cần phải thử ngRouteui.bootstrap

Nói chung tôi chỉ cần đặt

describe('myApp', function() { 
    beforeEach(module('foo')); 

    it('should do something awesome', function() { 
    // arrange 
    // act 
    // assert 
    }); 
}); 
Các vấn đề liên quan