2015-02-10 16 views
9

Tôi muốn thử nghiệm điều khiển nàyLàm thế nào để tiêm giá trị góc và hằng số góc vào thử nghiệm đơn vị nghiệp?

/controllers/datetimepicker.js

angular.module('c2gyoApp') 
    .value('smConfig', { 
    rate: 'A', 
    tariff: 'classic' 
    }) 
    .controller('DatetimepickerCtrl', [ 
    '$scope', 
    'stadtmobilRates', 
    'smConfig', 
    function($scope, stadtmobilRates, smConfig) { 
     ... 
     $scope.getCurrentRate = function(rate, tariff) { 
     // studi and classic have the same rates 
     if (tariff === 'studi') { 
      tariff = 'classic'; 
     } 
     return stadtmobilRates[tariff][rate]; 
     }; 
     ... 
    } 
    ]); 

Tôi đã thay đổi bộ điều khiển kể từ khi tôi đã viết các bài kiểm tra. Một số hằng số đã chuyển sang angular.module('c2gyoApp').value('smConfig'){} và tôi cũng cần liên tục từ angular.module('c2gyoApp').constant('stadtmobilRates'){}:

/services/stadtmobilrates.js

angular.module('c2gyoApp') 
    .constant('stadtmobilRates', { 
    'classic': { 
     'A': { 
     'night': 0, 
     'hour': 1.4, 
     'day': 21, 
     'week': 125, 
     'km000': 0.2, 
     'km101': 0.18, 
     'km701': 0.18 
     }, 
     ... 
}); 

Đây là thử nghiệm của tôi cho đến nay:

/test/spec /controllers/datetimepicker.js

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

    // load the controller's module 
    beforeEach(module('c2gyoApp')); 

    var DatetimepickerCtrl; 
    var scope; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function($controller, $rootScope) { 
    scope = $rootScope.$new(); 
    DatetimepickerCtrl = $controller('DatetimepickerCtrl', { 
     $scope: scope 
    }); 
    })); 

    it('should calculate the correct price', function() { 
    expect(scope.price(10, 10, 0, 0, 'A', 'basic') 
     .toFixed(2)).toEqual((18.20).toFixed(2)); 
     ... 
    }); 
}); 

Làm cách nào để tiêm angular.module('c2gyoApp').value('smConfig'){}angular.module('c2gyoApp').constant('stadtmobilRates'){} vào thử nghiệm? Tôi đang sử dụng bố cục tiêu chuẩn yeoman. Tệp karma.conf bao gồm tất cả các tệp .js cần thiết, do đó, đó chỉ là câu hỏi về nơi để chèn các phần tử góc.

Trả lời

13

Vì bạn đang bổ sung thêm các module c2gyoApp với:

beforeEach(module('c2gyoApp')); 

Tất cả mọi thứ đã đăng ký bên trong mô-đun cần được tiêm. Vì vậy, điều này sẽ hoạt động:

var smConfig, stadtmobilRates; 

beforeEach(inject(function($controller, $rootScope, _smConfig_, _stadtmobilRates_) { 

    scope = $rootScope.$new(); 
    DatetimepickerCtrl = $controller('DatetimepickerCtrl', { 
     $scope: scope 
    }); 
    smConfig = _smConfig_; 
    stadtmobilRates = _stadtmobilRates_; 
} 
Các vấn đề liên quan