2016-08-23 62 views
0

這是我處理導航的簡單服務。 如果用戶按照當前狀態點擊「下一個」,他將被重定向到下一頁。如何在angularjs服務中測試一個函數

'use strict'; 

angular 
.module('myAngularmodule') 
.service('ButtonBarService', 
function ($state, StatesConstants) { 

    return { 
     next: next 
    }; 

    function next() { 
     switch ($state.current.name) { 
      case StatesConstants.LICENSE : 
       $state.go(StatesConstants.APPLICATIONGROUP); 
       break; 
      case StatesConstants.APPLICATIONGROUP : 
       $state.go(StatesConstants.ANALYSIS); 
       break; 
      default: 
       break; 
     } 
    } 


}); 

這是我的規格文件,當我試圖測試失敗

'use strict'; 

describe('ButtonBarService', function() { 

beforeEach(module('myAngularmodule')); 
var ButtonBarService; 

beforeEach(inject(function (_ButtonBarService_) { 
    ButtonBarService = _ButtonBarService_; 

    spyOn(ButtonBarService, 'next'); 

})); 

describe('next()', function() { 

    it('should retrieve the current user', function() { 
     expect(ButtonBarService.next).toHaveBeenCalled(); 
    }); 

}); 

}); 

失敗說「下一個預期的間諜已被稱爲」。 這個服務沒有後端的東西,我只是推廣它來處理buttonbar的東西。 我對前端頗爲陌生。我看到有$ http的答案,但無法理解。

+0

您需要檢查內部函數在做什麼。您需要在每個函數之前添加'ButtonBarService.next()',然後檢查期望 –

+0

您能否詳細回答這個問題。我已經在監視它。我需要做其他事嗎? – ankitd

+0

你正在測試錯誤的東西,我的意思是說,你必須測試'$ state.go(StatesConstants.APPLICATIONGROUP);'在某些條件下...你所做的期望應該是其他服務或控制器的一部分 –

回答

0

嘗試(書面ES6語法):

spyOn(ButtonBarService, 'next').and.callFake(() => true); 

那麼你的預期應該工作,我想。

+0

感謝@rrd,但它沒有奏效。 – ankitd