2015-05-20 3 views
3

У меня есть следующий тестовый случай:Тестирование фильтр, используемый в функции контроллера

it('should return id if the post is successful',function(){ 
     var result = { 
       id : "123" 
     }; 
     ctrl.saveCallback(result); 
     expect(ctrl.method.id).to.equal("123"); 
    }); 

Где ctrl.saveCallback копирует result.id в method.id на ctrl, а затем показывает знамя успеха. На баннере успеха мы используем фильтр translate, чтобы перевести сообщение, прежде чем показывать его.

Функция:

..... 
ctrl.method.id = result.id; 
magicallyShowOnScreen($filter('translate')('MESSAGES.SUCCESS')); 
.... 

magicallyShowOnScreen это сервис, который показывает то, что строка мы переходим на экран, и был введен в beforeEach.

Может кто-нибудь указать в правильном направлении относительно того, как я должен тестировать или издеваться над этим $filter('translate')?

+0

Вы используете Sinon, Chai? Можете ли вы показать, как вы вводите «magicallyShowOnScreen» в свой 'beforeEach'? – Phil

ответ

0

Предисловие: Я не знаком с Mocha.js или как создать шпионов, но вы все равно будете вводить их или подобные имитирующие объекты так же, как и для других тестовых фреймворков.

Ниже приведен пример жасмина, я надеюсь, что это поможет.


При начальной загрузки вашего модуля (с помощью module/angular.mocks.module) функцию, вы должны предоставить собственную версию $filter, который должен быть макет/Шпион, который возвращает другой макет/шпион. Например

var $filter, filterFn; 
beforeEach(module('myModule', function($provide) { 
    $filter = jasmine.createSpy('$filter'); 
    filterFn = jasmine.createSpy('filterFn'); 
    $filter.and.returnValue(filterFn); 

    $provide.value('$filter', $filter); 
}); 

Затем, в тесте, вы можете убедиться, что $filter вызывается с правильными аргументами, например

expect($filter).toHaveBeenCalledWith('translate'); 
expect(filterFn).toHaveBeenCalledWith('MESSAGE.SUCCESS'); 
expect(magicallyShowOnScreen).toHaveBeenCalled(); // assuming this too is a spy 

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

  • Нет связанных вопросов^_^