2016-12-06 25 views
0

私がしようとしているのは、単なるJSで書かれた関数の既存のライブラリのTypescriptでユニットテストを書くことです。私たちのページロジックはすべてJSでも同じです。これらの関数の中には、誤った型を入力として与えたときに例外を投げたものがあります。たとえば、TypescriptとJasmineを使ってTypeErrorをテストする

第2引数には、値を取得するプロパティ名が必要です。 pluck関数内には、オブジェクトの配列が渡されたことを検証する型チェックがあり、失敗した場合にはTypeErrorをスローします。

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

は、しかし、私の宣言ファイルで、私はそれは、次のような定義されています:

だから、オブジェクトの正しい種類は、私はプレーンなJSのように書くでしょうに渡されたことを検証するテストを書くための

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

だから私はTSを使用してユニットテストを書くために行くとき、私は明らかに、コンパイルエラーを取得: TS compile error

だから私は義和をどのように行うのですか私はその機能に何も変更せずに欲しいですか?このファイルだけを無視するようにTSで設定できるものはありますか?

答えて

0

テストを変更する位置にいる場合は、テストの2番目の引数を文字列として送信できます。

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

UPDATE: あなたはすでにあなたが関数宣言で型を指定しているとしてコンパイルフェーズ(JSへtranspilation)にチェックを入力しないtypescriptですを使用しています。技術的には、コードはすでにテストケースを渡しています。 ユニットテストによるタイプ検証が本当に必要な場合は、typeが 'any'に設定されている場合は、コンパイル時にチェックされないため、行うべきです。 ORチェックここでは Unittesting in TypeScript

+0

これはTSエラーを停止しますが、明示的に文字列であるかどうかをテストしているのでテストが失敗します。また、私は同じ問題を抱えているオブジェクト、配列、関数などを調べています。 –

+0

は、回答で更新されます –

+0

私は 'any'を使うことができると思います。 TSを使用しているときに関数の内部動作を反映していないのでちょっと変わったですが、私たちのアプリケーションでTSをどこからでも使用できるようになっていないので、定義のこの「エラー」は私以外の誰にも見られません。重要なことは、コンパイルされたJSは同じままであり、TypeErrorを投げつけ続けていることです。 –

関連する問題