2017-07-20 64 views
0

我有一個依賴於多個提供者的angular2組件。從我目前閱讀的內容來模擬提供商,我有兩種選擇Angular2提供程序自動在每個提供者中模擬方法

  1. 爲每個提供商編寫模擬服務。
  2. 使用間諜和模擬只有組件調用的方法。

如果我選擇了選項1,那麼我必須寫很多虛擬代碼,這是浪費空間。如果我停止選擇2,那麼我需要了解每個提供者是什麼,然後只寫模擬方法。我想要做的是在所有提供者中自動模擬所有方法,然後只在需要時編寫間諜(自定義模擬邏輯)。我該怎麼做呢?

例如我怎麼會自動嘲笑以下服務

public class ActualService(){ 
    public getUsers(){ 
    //Actual call 
    } 

    public udpateUser(user:User){ 
    //Actual call to be backend to update the user 
    } 
} 

我怎麼自動模擬一切都在這個使用類似興農庫什麼都不做?或其他東西

回答

0

快捷方式在單元測試中是不可接受的,因爲這會導致低質量的測試,當它們失敗時它們應該並且難以調試時不會失敗。

最好的方法是創建一個新的存根/模擬對象,該對象只有受當前測試影響的方法。當測試代碼更改爲引入測試中未考慮的方法時,這將導致測試失敗,並顯示明確的錯誤消息。

儘管描述的缺點,它可能與興農做到這一點:

const serviceStub = sinon.createStubInstance(Service); 

或者茉莉:

const serviceStub = jasmine.createSpyObj('Service', 
    Service.prototype.getOwnPropertyNames 
    .filter(prop => typeof Service.prototype[prop] === 'function') 
); 

... 
providers: [{ provide: Service, useValue: serviceStub }] 
...