0
什麼是模擬localForage.getItem方法的最佳方法?我只需要在調用localForage.getItem時簡單地返回一個示例對象。如何在jasmin-karma單元測試中爲LocalForage.getItem()方法創建模擬?
什麼是模擬localForage.getItem方法的最佳方法?我只需要在調用localForage.getItem時簡單地返回一個示例對象。如何在jasmin-karma單元測試中爲LocalForage.getItem()方法創建模擬?
的第一件事就是給包裹第三方庫的可注射的服務,所以你可以在你的測試
app.factory('localForage',function(){
//likely coming from global namesapce
return localForage;
});
這就可以在指令注入交換了模擬實現,服務,控制器等
//example with controller
myApp.controller('myCtrl',['localForage',function(localForage){
this.getItem = localForage.getItem;
this.setItem = loaclForage.setItem;
}]);
現在的想法是在測試中用模擬代替正常的實現。有這樣做的幾種方法:
全球:在創建運行測試之前,模擬模塊, 將定義模擬實現您所有的 測試,你會調用(beforeEach(模塊(「myMockModule」 ))),而不是在一個測試套件的基礎的實際localForage模塊
: 「$提供」 不同的實現在運行測試之前:
beforeEach(module('myModule',function($provide){
$provide.factory('localForage', function(){
return MockImpl;
});
});
var ctrl;
beforeEach(inject(function($controller){
ctrl = $controller('myCtrl',{localForage:mockImpl});
}))
現在關於模擬實現這取決於你想用它做什麼(窺探它,存根,其他的東西),但其想法是使它實現與實際服務相同的api Ë
var mockImpl = {
getItem : angular.noop,
setItem : angular.noop
}
,如果你想檢查localForage被調用,這個簡單的人會被罰款,例如哪些參數(使用spyOn(mockImpl '的getItem'))