このコントローラーをテストしたい
/ 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ファイルが含まれているため、angular要素をどこに挿入するかが問題になります。
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_;
}