2014-09-18 20 views
11

Tôi đang sử dụng cú pháp "điều khiển dưới dạng" trong ứng dụng góc cạnh. Và bây giờ là lúc để thử nghiệm, nhưng tất cả các ví dụ là dành cho các bộ điều khiển được tiêm với phạm vi $. Làm thế nào để tôi gọi phương thức "this.addItem" và kiểm tra xem nó đã thêm một mục vào "this.items" trong bài kiểm tra Jasmine chưa?Thử nghiệm góc "bộ điều khiển dưới dạng" với hoa nhài

(function() { 
"use strict"; 
    angular.module('myModule', ['factoryModule']) 
    .controller('MyController', function (myFactory) { 
     this.items = []; 

     this.selectedItem = null; 

     this.addItem = function (itemType) { 
      var item = myFactory.create(itemType); 
      this.items.push(trigger); 
      this.selectedItem = item; 
     }; 

     this.removeItem = function (item) { 
      this.items.splice(this.items.indexOf(item), 1); 
     }; 
    }); 
})(); 
+3

Trong thử nghiệm của bạn, bạn có thể tạo một thể hiện của bộ điều khiển bằng cách sử dụng dịch vụ '$ controller'. Và sử dụng cá thể và gọi additem trên nó. và sau đó trong kỳ vọng của bạn kiểm tra cho các hạng mục tài sản trên trường hợp bộ điều khiển .. – PSL

+0

Cảm ơn bạn, lời khuyên của bạn thực sự đã giúp! – Denis

Trả lời

17

Chỉ cần kéo @ bình luận PSL của thành câu trả lời, mã này làm việc cho tôi:

describe('Controller: ExampleController', function() { 

    beforeEach(module('app')); 

    var ExampleController; 

    beforeEach(inject(function ($controller) { 
    ExampleController = $controller('ExampleController', {}); 
    })); 

    it('should define foo', function(){ 
    expect(ExampleController.foo).toBeDefined(); 
    }); 
}); 
0

Sao chép đoạn mã sau vào một tập tin và sau đó chạy một tập tin trong trình duyệt

<html> 
    <head> 
    <!-- Jasmine References --> 
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.css"> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine.min.js"></script> 
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/jasmine-html.min.js"></script> 
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.3.3/boot.min.js"></script> 

    <!-- Angular and Angular Mock references --> 
    <script type="text/javascript" src="https://code.angularjs.org/1.4.0-rc.2/angular.min.js"></script> 
    <script type="text/javascript" src="https://code.angularjs.org/1.4.0-rc.2/angular-mocks.js"></script> 
    </head> 
    <body></body> 
    <script type="text/javascript"> 
    angular.module('calculatorApp', []).controller('CalculatorController', function CalculatorController() { 
     self = this; 
     self.sum = function() { 
      self.z = self.x + self.y; 
     }; 
    }); 

    describe('calculator: CalculatorControllerAs', function() { 

     beforeEach(module('calculatorApp')); 

     var CalculatorControllerAs; 
     beforeEach(inject(function(_$rootScope_, _$controller_){    
      var scope = _$rootScope_.$new(); 
      CalculatorControllerAs = _$controller_('CalculatorController', {$scope: scope}); 
     })); 

     describe('sum', function() { 
      it('1 + 1 should equal 2', function() {    
      CalculatorControllerAs.x = 1; 
      CalculatorControllerAs.y = 2; 
      CalculatorControllerAs.sum(); 
      expect(CalculatorControllerAs.z).toBe(3); 
      }); 

     }); 
    }); 
    </script> 
</html> 
Các vấn đề liên quan