簡體   English   中英

如何將角度值和角度常數注入業力單元測試?

[英]How to inject angular value and angular constant into karma unit test?

我想測試這個控制器

/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];
      };
      ...
    }
  ]);

自從我編寫測試以來,我已經更改了控制器。 一些常量已移至angular.module('c2gyoApp').value('smConfig'){} ,我還需要來自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
      },
      ...
});

這是我到目前為止的測試:

/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));
      ...
  });
});

如何將angular.module('c2gyoApp').value('smConfig'){}angular.module('c2gyoApp').constant('stadtmobilRates'){}注入測試? 我正在使用標准的自耕農布局。 karma.conf文件包含所有必需的.js文件,所以這只是一個注入角度元素的問題。

由於您要添加c2gyoApp模塊:

beforeEach(module('c2gyoApp'));

在該模塊內注冊的所有內容都應該是可注射的。 所以,這應該工作:

var smConfig, stadtmobilRates;

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

   scope = $rootScope.$new();
   DatetimepickerCtrl = $controller('DatetimepickerCtrl', {
      $scope: scope
   });
   smConfig = _smConfig_;
   stadtmobilRates = _stadtmobilRates_;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM