Sto scrivendo alcuni test per una direttiva Angular e ho bisogno di simulare l'input dell'utente in un campo di input. Ho provato a fare questo:Attivare manualmente il binding di dati angolari per un campo di input (solo a scopo di test unitario)
element.find('input').val('some value').trigger('input');
ma non ha funzionato. Triggering change
non ha funzionato neanche. So che posso accedere direttamente allo scope dell'elemento con element.scope()
e modificarlo, ma sembra più naturale modificare il valore dell'input e lasciare che Angular esegua il binding dei dati.
Per quello che vale, ho verificato input(name).enter(value)
da angolare ngScenario, e sembra di fare lo stesso come ho fatto io:
...
input.val(value);
input.trigger(event || (supportInputEvent ? 'input' : 'change'));
...
Che cosa mi manca? C'è un modo migliore per testare l'input dell'utente in questo caso?
(ho fatto a jsFiddler script per illustrare la questione)
UPDATE
Penso che è necessario qualche chiarimento. Non sto provando a cambiare il DOM né l'ambito al di fuori del regno angolare di per sé. Ho una direttiva che esegue il rendering di una casella di input associata a una proprietà dell'ambito della direttiva. Sto scrivendo test automatizzati per garantire che la direttiva faccia ciò che deve fare, e ciò che un test dovrebbe fare è simulare alcuni input in modo che l'ambito della direttiva venga aggiornato e posso affermare che alcuni comportamenti vengono eseguiti su quell'input. Come ho detto prima, posso modificare lo scope della direttiva dal codice di test usando element.scope()
, ma preferirei cambiare il valore dell'input e lasciare che Angular faccia il suo esempio.
Come testare la direttiva? Il modo in cui fai scattare un evento di input mi sembra giusto. Lo stai facendo in un file di prova, giusto? – ghiden
@ghiden Ho già avuto risposta alla mia domanda - vedi sotto. Grazie per il tuo interesse, però. :) –