2012-09-18 14 views
26

Ho provato il AngularJS e2e tests e mi sto bloccando determinando se una casella di controllo è selezionata o meno.Come convalidare quando una casella di controllo è selezionata nei test AngularJS e2e?

ho usato il capo all'altro test dello checkbox input come campione (vedere la fine per terminare scheda prova nel Esempio).

snippet HTML:

Value1: <input type="checkbox" ng-model="value1"> <br/>

controller Snippet:

function Ctrl($scope) { 
    $scope.value1 = true; 
} 

Ecco cosa ho provato:

1) expect(binding('value1')).toEqual('true');

Questo funziona nel test end-to-end del campione finché value1 viene visualizzato sullo schermo con {{value1}}. Se testate questo localmente e rimuovete `{{value1}} il test di binding fallisce. Nella maggior parte dei miei esempi del mondo reale non visualizzo il valore della casella di controllo sullo schermo da nessuna parte.

2) expect(input('value1').val()).toEqual('true');

Il valore Verrà sempre on e non sono correlati alle se la casella di controllo è in uno stato controllato (tratto da this post).


Nota: Sembra che il test E2E angolare sarà sostituito con Protractor in futuro (vedi the docs)

risposta

17

ho upvoted questa domanda, come ho avuto lo stesso problema. Ho usato la soluzione alternativa nel mio test, ma spero di vedere il modo migliore.

expect(element('input[ng-model="value1"]').attr('checked')).toBeTruthy(); 
+0

Grazie! Mi piace questo meglio di quello che sto facendo attualmente. Terrò questa domanda aperta un po 'nel caso in cui ci sia un modo migliore :) – Gloopy

+5

Nel karma, non è "attr" ma "prop" che dovrebbe essere usato.Per i compagni googlers. – Offirmo

1

Sto sperando che ci sia un modo migliore, ma ho avuto intorno a questo convalidando il conteggio degli elementi di input controllati corrispondenza a quel modello vincolante:

expect(element('input[ng-model="value1"]:checked').count()).toBe(1);

almeno un inconveniente di questo quando si controlla se qualcosa non sia selezionata è se l'elemento non esiste o se ci fosse un errore di battitura il valore sarebbe ancora 0 come in questo esempio:

expect(element('input[ng-model="valueDoesNotExist"]:checked').count()).toBe(0);

47

per chiunque utilizzi Protractor, c'è WebDriver isSelected() proprio per questo.

Invece di chiedere checked attributo che si può fare:

expect(element(by.model('value1')).isSelected()).toBeTruthy(); 
+0

Quando provo questo codice ottenendo Eccezione: "stato elemento non valido: Elemento non è attualmente intercettabile e non può essere manipolato". Qualche idea su come risolvere questo – Pradeep

+0

Nei giorni del mio goniometro, ho risolto il problema dell'elemento Stanti con lo script [waitReady.js] (https://gist.github.com/elgalu/2939aad2b2e31418c1bb), vedi: http: // stackoverflow .com/questions/35533139/goniometro-corretto-uso-di-waitready-js-file-nei-miei-test/35536164 –

+0

Questo dovrebbe essere cambiato per essere la risposta accettata –

Problemi correlati