2015-05-20 187 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.idmethod.idctrl,然後顯示成功的一面旗幟。在成功橫幅上,我們使用translate過濾器在顯示消息之前翻譯消息。

功能:

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

magicallyShowOnScreen是顯示我們傳遞到屏幕上的任何字符串服務,並已注入beforeEach。

有人可以請指出正確的方向,我該如何測試或模擬此$filter('translate')

+0

您使用興農,柴?你能告訴你如何在'beforeEach'中注入'magicallyShowOnScreen'嗎? – 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