2016-11-10 53 views
0

我是新來的這個空間,所以忍受着我。我在Ionic 2項目中工作,所以它使用Angular 2,Typescript和Jasmine進行單元測試。我正在嘗試爲一個奇怪的案例編寫單元測試。我有一個第三方庫,我導入一個組件導入頂部像import * as thirdparty from "thirdparty-library"和後來我的組件打電話像thirdparty.setup(someStuff, someMoreStuff, anotherFunc)在Ionic中使用Jasmine有沒有辦法模擬/存根靜態命名空間函數調用?

真的,我想要做的是模擬thirdparty與我自己的假anotherFunc,我通過單元測試。那麼有沒有辦法在構造函數中傳遞一些東西,並讓它覆蓋這個thirdparty命名空間?預先感謝您

+0

不,這就是爲什麼我們在Angular中有DI。 – estus

+0

@estus Huh?這是Angular,我只是不知道如何「DI命名空間」,如果這是正確的話。所以請讓我知道,謝謝。 :) –

+1

你不能DI命名空間。如果您需要使用第三方庫,則必須將其包裝到服務中,並僅通過DI使用。 – estus

回答

1

作爲一等公民的職能,可以被賦予新的價值。所以如果你願意,你總是可以做點類似於

let ogFunct; 

beforeEach(() => { 
    ogFunt = thirdparty.setup; 
    thirdparty.setup = (arg1, arg2, arg3) => { 
    console.log(`arg1 - arg2 - arg2`) 
    } 
}); 

afterEach(() => { 
    thirdparty.setup = ogFunct; 
}); 

有時庫類型定義將使函數只讀。在這種情況下,你不能分配任何東西。也許在這種情況下,更好的選擇是將第三方調用抽象爲服務。只是嘲笑服務。無論如何,你甚至可以考慮這樣做。我個人認爲這是更好的設計,然後直接在組件中使用第三方。

+0

謝謝......我採取了你提出的後一條路線,並且成爲了我可以嘲笑的提供者。 –

相關問題