У меня есть приложение angularJS, которое имеет две службы. Я использую одну из сервисов (CONSTANT), чтобы просто вернуть коды, хранящиеся на основе имени. Я использую это, чтобы мой код был более читабельным, и я могу использовать что-то вроде CONSTANT.APPLE, а не код для "apple", который может быть 7898734. Я использую Karma для тестирования службы, которая использует сервис CONSTANT внутри себя, До сих пор я только издевался над сервисом CONSTANT следующим образом:
CONSTANT = {
APPLE: 564,
BANANA: 566,
KIWI: 577,
PINEAPPLE: 522455013
};
$provide.value('CONSTANT', CONSTANT);
Но поскольку я добавляю больше тестов, я почти полностью дублирую всю свою ПОСТОЯННУЮ службу внутри моего теста. Есть ли способ, которым я могу вставить реальный ПОСТОЯННЫЙ сервис в свой тест вместо того, чтобы создавать для него макет?
Я пробовал просто впрыскивать его, как в реальной службе:
describe('ServiceToTest', ['CONSTANT', function (CONSTANT) {...}]);
но я получаю эту ошибку от Karma:
Uncaught Error: describe does not expect a done parameter
Я сделал что-то подобное в своем коде, но не для констант. Вы можете просто создать дополнительный файл в тестовой папке и в файле, создать нормальную угловую службу, а затем ввести эту службу в свои тесты.
То, что вы могли бы сделать, это вместо того, чтобы иметь константы в службе, определить их в модуле приложения, поэтому каждый раз, когда вы используете этот модуль, вы будете иметь их. Вы можете сделать что-то вроде:
angular
.module('main', [])
.constant('FruitConstants', {
APPLE: 564,
BANANA: 566,
KIWI: 577,
PINEAPPLE: 522455013
})
//The rest of your module
И затем в службе, где вы должны их использовать, вы просто вводите "FruitConstants", как если бы они были другой службой:
angular
.module('main')
.service("SomeService", someService);
someService.$inject = ['FruitConstants'];
function someService(FruitConstants){
//Your service logic
}