2017-08-16 6 views
1

テストの作成は私にとって初めてのことです。イベントを受け取る関数のテストを作成しようとしています。問題が起きた場合はonChangeコールで、chaiを使用しています。イベントを受け取る関数をテストするには?

My機能:

export function handleChange(event) { 
    if (isNaN(event.target.value)) { 
    event.preventDefault(); 
    alert('input can only be a number'); 

    } else if (event.target.value > 5) { 
    event.preventDefault(); 
    alert('Rating can not be over 5 stars, please try again'); 

    } else { 
    this.setState({starRate: event.target.value}); 
    } 

答えて

0

まず、あなたが入力event.preventDefault()を適用しています。この場合には防止する「イベント」はないので、コードは本質的に役に立たない。

eventが関数に渡されているときは、event.target.valueを使用しています。この場合、単にevent.valueを探しているだけです。

単にJavaScript関数にパラメータとしてthisを渡し、現在の入力を通過します。 thisは常に現在の要素を参照します。

function handleChange(event) { 
 
    if (isNaN(event.value)) { 
 
    alert('The input can only be a number.'); 
 
    } else if (event.value > 5) { 
 
    alert('Rating can not be over 5 stars, please try again.'); 
 
    } else { 
 
    alert('The input was OK.'); 
 
    } 
 
}
<input onchange="handleChange(this)">

あなたが入力を入力(し、入力のオフにクリックしようとすると)、alert()がスローされます。

はここで働い例です。

希望すると便利です。 :)

+0

お返事ありがとうございました:) あなたはevent.preventDefault()に関して、そうは必要ありませんでした。 'event.target.value'の 'target'が失われている場合は、単に入力値からイベント値を取得しません。 私はその機能をテストし、発生時にイベントをシミュレートするのに役立つ答えを探していました。 –

+0

実際に 'event.target.value'が必要な場合は、クリックハンドラを親に追加してから委任する必要があります。これは珍しいアプローチですが、私のコードを上記のものに置き換えることはできません。そして、あなたはその事象について何をシミュレートしようとしていますか?入力がクリックされたときにロジックをトリガーしています。フォームを提出しようとしていますか?そのために '.submit()'を使うことができます。 –

+0

'event'オブジェクトには、委譲されたイベントハンドラを使用しているかどうかにかかわらず、' .target'プロパティがあります。 'event'オブジェクトには' .value'プロパティがありません。 – nnnnnn

関連する問題