Могу ли я использовать реальный сервис в тесте для другого сервиса?

0

У меня есть приложение 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
  • 0
    зависимости обычно вводятся в функцию beforeEach (), а не description (). Есть несколько примеров, доступных на docs.angularjs.org/guide/unit-testing
  • 0
    Я вижу это сейчас, спасибо, что указали мне в правильном направлении!
Теги:
karma-jasmine

1 ответ

0

Я сделал что-то подобное в своем коде, но не для констант. Вы можете просто создать дополнительный файл в тестовой папке и в файле, создать нормальную угловую службу, а затем ввести эту службу в свои тесты.

То, что вы могли бы сделать, это вместо того, чтобы иметь константы в службе, определить их в модуле приложения, поэтому каждый раз, когда вы используете этот модуль, вы будете иметь их. Вы можете сделать что-то вроде:

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    
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню