2017-08-16 6 views
1

Erstellen von Tests ist neu für mich. Ich versuche, einen Test für eine Funktion zu erstellen, die ein Ereignis empfängt. Es ist ein onChange Anruf, wenn es darauf ankommt, und ich verwende chai.Wie testen Sie eine Funktion, die ein Ereignis empfängt?

Meine Funktion:

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}); 
    } 

Antwort

0

Zuerst werden Sie event.preventDefault() zu einem Eingang Anwendung. Es gibt kein 'Ereignis', das in diesem Fall verhindert werden kann, so dass Code im Wesentlichen nutzlos ist.

Zweitens verwenden Sie event.target.value, wenn nur event an Ihre Funktion übergeben wird. Sie suchen einfach nach event.value in diesem Fall.

an dem Stromeingang passieren, einfach this als Parameter in die JavaScript-Funktion übergeben. this bezieht sich immer auf das aktuelle Element.

Hier ist ein funktionierendes Beispiel:

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)">

Wenn Sie eine Eingabe ein (und dann aus der Eingabe zu klicken versuchen), wird ein alert() geworfen werden.

Hoffe, das hilft! :)

+0

hey danke für deine antwort :) du hast recht über die event.preventDefault(), brauchte es nicht. Wenn ich das 'Ziel' in 'event.target.value' verliere, bekomme ich einfach nicht den Ereigniswert von der Eingabe. Ich suchte nach einer Antwort, die mir helfen kann, diese Funktion zu testen und ein Ereignis zu simulieren, wenn es auftritt. –

+0

Wenn Sie tatsächlich "event.target.value" benötigen, müssen Sie dem übergeordneten Element einen Click-Handler hinzufügen und dann delegieren. Das ist ein ungewöhnlicher Ansatz, obwohl es keinen Grund gibt, dass Sie meinen Code dafür nicht ersetzen können. Und welches "Event" versuchen Sie zu simulieren? Sie lösen bereits eine Logik aus, wenn auf die Eingabe geklickt wird. Versuchen Sie, ein Formular einzureichen? Sie können einfach '.submit()' dafür verwenden. –

+0

Das 'event' -Objekt hat eine '.target'-Eigenschaft, unabhängig davon, ob Sie delegierte Event-Handler verwenden. Das 'event' Objekt hat keine' .value' Eigenschaft. – nnnnnn

Verwandte Themen