2015-11-23 55 views

回答

2

的第一件事就是給包裹第三方庫的可注射的服務,所以你可以在你的測試

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'))

相關問題