2013-08-07 19 views
0

我有這家工廠名爲Songs其獲取歌曲的API每一秒:

​​

我想測試它,我想它顯示波紋管,但我想我是在錯誤的方式注入服務。當我嘗試運行測試時,它輸出錯誤:沒有未決請求刷新!。它就像不打電話。

describe('Songs', function(){ 
    var httpStub, localService; 
    beforeEach(module('pearlJam')); 

    beforeEach(inject(function(_$httpBackend_, Songs){ 
     httpStub = _$httpBackend_; 
     localService = Songs; 
    })); 

    it('lists all songs', function(){ 
     var httpResponse = { data: [1]}; 
     httpStub.whenGET('api/songs.json').respond(httpResponse); 

     var serviceResponse = localService.all; 
     httpStub.flush(); 

     expect(serviceResponse).toBe([1]); 
    }); 
    }); 
+0

什麼是'流'?它不應該是'歌'嗎? –

+0

是的,我打錯了。 –

回答

2

expectGET創建了一個新的期望,告訴角度在對/api/songs.json發出GET請求時使用給定對象進行響應。這只是註冊它應該做什麼,但沒有GET請求在這裏被解僱。

因爲您立即調用服務中的輪詢函數,所以在加載服務時會觸發http請求。

而且您必須在激發http請求(即加載服務之前)之前存儲響應。負載pearlJam模塊 - >與expectGET註冊期望 - >負載歌服務

在這裏,我的代碼剝離下來的最重要的組成部分,但重新注入的配置和$超時服務應該工作以及http://plnkr.co/edit/lbkxjTJbEjEXIzbyNPVF?p=preview

1

$httpBackend.flush()方法僅適用於請求期望像expectGET

whenGET方法允許您嘲笑後端並劫持請求來響應某些特殊的內容,但它不計入flush。

如果您打電話flush()沒有預期,它會拋出您遇到的錯誤。

+0

我試着用'expectGET'或者甚至在沒有'flush()'的時候離開'whenGET',它仍然失敗。 –