2014-04-13 17 views
8

Khi chạy một angularjs + Jasmine + Karma kiểm tra, tôi bị lỗi sau: enter image description herenhài angularjs thử nghiệm - Đối số 'PhoneListCtrl' không phải là một chức năng, đã không xác định

kịch bản thử nghiệm của tôi là:

describe('PhoneCat controllers', function() { 

    describe('PhoneListCtrl', function(){ 

    it('should create "phones" model with 3 phones', inject(function($controller) { 
     var scope = {}, 
      ctrl = $controller('PhoneListCtrl', { $scope: scope }); 

     expect(scope.phones.length).toBe(3); 
    })); 
    }); 
}); 

mã này chỉ là một bản sao từ AngularJS chính thức hướng dẫn ở đây: http://code.angularjs.org/1.2.0-rc.3/docs/tutorial/step_02

Dưới đây là một phần của tập tin karma.conf.js tôi:

// list of files/patterns to load in the browser 
files: [ 

    'js/bower_components/angular/angular.js', 
    'js/bower_components/angular/ngular-mocks.js', 
    'js/app/controllers.js', 
    'test/unit/*.js' 
], 

Lỗi là PhoneListCtrl không xác định, nhưng tôi tin rằng nó được xác định và được tải trong mã ở trên. Bạn nghĩ vấn đề là gì? Cảm ơn!

+0

Dường như tệp kiểm tra đơn vị của tôi là không nhận thức được PhoneListCtrl bộ điều khiển. Tôi nên xây dựng phụ thuộc như thế nào? Nếu có ai có thể giới thiệu một hướng dẫn tốt cho hướng dẫn thử nghiệm góc + Jasmine + karma? –

Trả lời

13

Phần khởi tạo mô-đun bị thiếu trong bài kiểm tra đơn vị của bạn. Bạn nên gọi số module('phonecatApp') trước khi gọi lần đầu tiên inject(). đơn vị mã thử nghiệm của bạn trong trường hợp này sẽ giống như thế:

describe('PhoneCat controllers', function() { 

    describe('PhoneListCtrl', function(){ 

    beforeEach(function() { 
     module('phonecatApp'); // <= initialize module that should be tested 
    }); 

    it('should create "phones" model with 3 phones', inject(function($controller) { 
     var scope = {}, 
      ctrl = $controller('PhoneListCtrl', { $scope: scope }); 

     expect(scope.phones.length).toBe(3); 
    })); 
    }); 
}); 

nơi phonecatApp là tên của module, nơi bạn định nghĩa điều khiển PhoneListCtrl của bạn.

Ngoài ra hướng dẫn bạn đang sử dụng đã lỗi thời, đó là phiên bản không ổn định của Góc (1.2.0-rc.3). Dưới đây là một phiên bản cập nhật của cùng một hướng dẫn cho phiên bản mới nhất của góc: http://docs.angularjs.org/tutorial/step_02

+0

Gosh ... Cảm ơn bạn rất nhiều, Vadim! Tôi sẽ không bao giờ tự mình tìm ra nó. –

+0

tính năng này không hoạt động – dopatraman

1

làm việc này cho tôi

describe('addCatControllerTest', function() { 

    describe('addCatController', function(){ 

     beforeEach(function() { 
      module('app'); 
     }); 

     beforeEach(inject(function($controller, $rootScope){ 
      $scope = $rootScope.$new(); 
     })); 

     it('Add Cat Controller test', inject(function($controller) { 
      var scope = {}, 
       ctrl = $controller('addCatController', { $scope: scope }); 
      expect(scope.title).toBe('Add Cat'); 
     })); 
    }); 
}); 
Các vấn đề liên quan