2017-08-30 12 views
1

は、私がのFocusEventをリッスンし、注目されている要素の種類にチェックを実行します。これは正常に動作します`instanceof`テストをどうやって模擬できますか?私のリアクトコードで

function onBlur(event) { 
    if(event.relatedTarget instanceof HTMLInputElement) { /* ... */ } 
} 

。私はちょうど私が次のように私はonBlurメソッドを呼び出すことができるはずと考えた...しかし、それに対する適切なユニットテストを書くことができていないようです:

onBlur({ relatedTarget: new HTMLInputElement() }); 

を...残念ながら、その結果でエラー:

TypeError: Illegal constructor 

私はJestとEnzymeを使用しています(これはjsdomを使用していると思いますか?)。

これに最も接近するには?これを使用する

答えて

1

あなたの要素を模擬することができます

var a = document.createElement('input') 
a instanceof HTMLInputElement // returns true 

あなたはより多くの動作を追加する必要がある場合は、あなただけのオブジェクトに追加することができます。

+0

:あなたは「INPUT」の文字列でなければなりませんtagNameを使用することができます助けてくれてありがとう! – Vincent

+0

@Vincent、あなたの問題を解決するのに役立ちましたら、回答を受け入れることを検討してください。 – eddyP23

+0

どちらか?彼らはどちらも同等です。私は22歳前のものを受け入れるだけで、答えのラットレースに貢献したくはありません... – Vincent

1

これはtrueと評価されます:

document.createElement('input') instanceof HTMLInputElement 
+0

「jsdom」が利用可能であることを知った後、私は実際にこれを行うことができると分かりました(申し訳ありません - Rubber Duck Debuggingは機能します)。助けてくれてありがとう! – Vincent

0

もう一つのアプローチは、あなたの入力要素をテストする方法を変更することです。 。私は `jsdom`が利用可能であったことに気づいたら - (ラバーダックデバッグ作業を行う申し訳ありませんが)私は実際に私はこれを行うことができることを考え出し

function onBlur(event) { 
    if(event.relatedTarget.tagName === 'INPUT') { /* ... */ } 
} 

onBlur({ relatedTarget: {tagName: 'INPUT'} }); 
+0

問題は 'relatedTarget'が潜在的に' null'になる可能性があることです。そのため、私はそれをチェックしたいのです(TypeScriptは役に立ちました:)。 – Vincent

関連する問題