2015-09-07 3 views
2

В моем блоке module.run он вызывает метод в службе, которую я создал. При выполнении моих тестов я хочу, чтобы он ссылался на макет службы вместо реального, который делает http-запросы. В настоящее время я пытаюсь протестировать контроллер, а не сам блок выполнения - как я могу вставить функцию mock в функцию запуска? Я попытался использовать $ provision.factory, но он ничего не делает и по-прежнему загружает службу как обычно.Вредоносная служба, введенная в блок запуска углового модуля

Я использую Жасмин, чтобы написать свои тесты.

app.js

angular.module("app") 
    .run(function(MyService) { 
     MyService.log("starting app"); 
    }); 

test.js

describe("MyController", function() { 

    beforeEach(function() { 
     module(function ($provide) { 
      $provide.factory("MyService", { log: function(){} }); 
     }); 
    }); 

    // I want module 'app' to execute its run function using injected value for MyService 
    beforeEach(module("app")); 

    beforeEach(inject(function($controller, $rootScope) { 
     MyController = $controller("MyController", { $scope: $rootScope.$new() }); 
    })); 

    ........... 

}); 
+2

тестирует блок запуска модуля, необходимый для вашего модульного тестирования? Угловая рекомендация состоит в том, чтобы объявить блок выполнения в изолированном модуле, чтобы его можно было легко игнорировать в модульных тестах, см. Https://docs.angularjs.org/guide/module#run-blocks –

+0

Я не хочу тестировать прогон блок, но он выполняется автоматически, когда я загружаю модуль в свои тесты, а затем вызываю эту службу, которую я не хочу делать –

ответ

3

В этом случае важно порядок.

Вам необходимо загрузить приложение первый

beforeEach(module("app")); 

, а затем перезаписать определение MyService.

beforeEach(
    module({ 
    "MyService": { 
     log: function(message) { 
     console.log("MyFakeService called: " + message); 
     } 
    } 
    }) 
); 

В противном случае внедрение сервиса приложения в последний раз зарегистрировано и используется.

работает пример здесь - смотрите на консоль http://plnkr.co/edit/BYQpbY?p=preview

+0

Спасибо за это! –

+0

Я делаю то же самое, но не получаю fakeService. есть ли другой способ сделать то же самое? –

Смежные вопросы