2016-04-05 42 views
1

我正在寫作和JS單元測試。這是我仍然在努力並且正在學習如何正確地做的事情。我有一個函數調用api,然後將承諾中的數據分配給一個變量。下面是代碼:單元測試,以確保一個函數調用通過一個API和分配數據到一個變量

API

this.get_history = function(item_id) { 
var deferred = $q.defer(); 
$http.get('/api/items/' + item_id + '/bids', { 
    ignoreLoadingBar: true 
    }) 
    .success(function(data, status, headers, config) { 
    deferred.resolve(data); 
    }) 
    .error(function(data, status, headers, config) { 
    deferred.reject(data); 
    }); 
return deferred.promise; 
}; 

函數來調用API

item.refresh_bid_history = function() { 
    var self = this; 
    my_api.get_history(self.id).then(function(data){self.bid_history = data}); 
}; 

我想,要麼確保該API被調用編寫測試,和/或者數據部分實際上被分配到item.bid_history屬性。以下是我現在的測試。

測試

it ('refresh_bid_history calls get_history API', inject(function() { 
    var item_json = mock_item_details_json(); 
    var item = ItemService.get_item(fb_ref, item_json); 
    item.bid_history = []; 
    item.refresh_bid_history(); 
    expect(item.bid_history.length).toEqual(1); 
    expect(item.bid_history[0].placed_at._d).toBeDefined(); 
})); 

如果您需要更多的信息,我可以嘗試,並提供它。

回答

2

由於您的API返回Promise,因此您的expect不應起作用,因爲執行expect時,您的item.bid_history未更新。

您可以使用Mocha直接測試您的API get_history。最新版本有測試Promise的原生支持,請參閱本文:Mocha With Promises

或者如果你想測試你的服務,這裏是我的todoMVC test example。也許你可以從中得到一些想法。

爲了使簡單:

  1. 使用$httpBackend嘲笑後端;
  2. 運行您的服務;
  3. 驗證結果。
+0

謝謝!在研究瞭如何使用''httpBackend'''後,我纔開始工作。我很欣賞這個建議。 –

相關問題