2016-12-06 70 views
0

我正在嘗試的是在Typescript中爲單元測試編寫單元測試,以獲取現有的函數庫,這些函數是使用純JS編寫的。我們所有的頁面邏輯也都是純JS。當給定錯誤類型作爲輸入時,這些函數中的一些會拋出異常。例如:使用Typescript和Jasmine對TypeError進行測試

Collection.pluck([{"a":1},{"a":2}], "a") // Pulls the values out of a list of objects 
> [1, 2] 

因此,第二個參數應該有一個字符串,您想要獲取值的屬性名稱。在pluck函數中有類型檢查來驗證已經傳入了一個對象數組,如果失敗則拋出一個TypeError。

所以編寫測試驗證的正確類型的對象是通過了我會寫它像普通的JS:

expect(function(){ Collection.pluck([{"a":1},{"a":2}], 0); }).toThrowError(TypeError); 
在我的聲明文件

但是我把它定義爲這樣的:

declare namespace Collection { 
    function pluck(obj: Object, propertyName: string): any; 
} 

所以,當我去使用TS我得到一個編譯錯誤,明明寫單元測試: TS compile error

所以,我該怎麼辦WHA我希望沒有任何改變的功能?有沒有什麼我可以在TS中配置忽略此文件僅此?

回答

0

如果您處於更改測試的位置,您可以嘗試將測試的第二個參數作爲字符串發送。

expect(function(){ Collection.pluck([{"a":1},{"a":2}], '0'); }).toThrowError(TypeError); 

UPDATE: 您正在使用的打字稿這已經這樣做請在編譯階段(transpilation到JS)檢查爲您指定的函數聲明的類型。技術上你的代碼已經通過測試用例。 如果確實需要通過單元測試進行類型驗證,那麼對於類型設置爲'any'的情況,應該這樣做,因爲這些在編譯期間不會被檢查。 或在這裏檢查 Unittesting in TypeScript

+0

雖然這將停止TS錯誤,但它會通過測試失敗,因爲我測試它是否顯式爲字符串。此外,我還做了其他類似的測試,其中我正在檢查對象,數組,函數等,我也遇到同樣的問題。 –

+0

將更新回答 –

+0

我想我可以使用'任何'。這很奇怪,因爲它不能反映使用TS時函數的內部工作方式,但不像我們可以開始在應用程序的任何地方使用TS,所以除了我之外,任何人都不會看到定義中的這個「錯誤」。重要的是,編譯的JS保持不變,並繼續拋出TypeError。 –

相關問題