2012-09-18 20 views
26

He estado probando el AngularJS e2e tests y me estoy atascando al determinar si se marca o no una casilla de verificación.¿Cómo validar cuándo se marca una casilla de verificación en las pruebas AngularJS e2e?

I utilizaron el extremo a extremo de prueba para la checkbox input como una muestra (ver el Fin para terminar pestaña prueba en el Ejemplo).

código HTML:

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

controlador fragmento:

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

Aquí es lo que he intentado:

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

Esto funciona en la prueba de extremo a extremo de la muestra, siempre que value1 se muestre en la pantalla con {{value1}}. Si prueba esto localmente y elimina `{{value1}} la prueba de enlace falla. En la mayoría de mis ejemplos del mundo real, no estoy mostrando el valor de la casilla en ninguna parte.

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

El valor siempre será por defecto on y no está relacionada a si o no la casilla de verificación se encuentra en un estado activado (tomado de this post).


Nota: Parece que la prueba de E2E angular será reemplazado por Protractor en el futuro (ver the docs)

Respuesta

17

I upvoted esta pregunta, ya que tenía el mismo problema. Utilicé la siguiente solución en mi prueba, pero espero ver la mejor manera.

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

Gracias! Me gusta más de lo que estoy haciendo actualmente. Mantendré abierta esta pregunta solo en caso de que haya una mejor manera :) – Gloopy

+5

En karma, no se debe usar 'attr' sino' prop'.Para compañeros googlers. – Offirmo

1

Estoy esperando que hay una manera mejor, pero llegué en torno a esta validando el número de los elementos de entrada controladas emparejan que la unión modelo:

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

al menos un inconveniente de este al comprobar si algo que no se comprueba es si el elemento no existe o si había un error tipográfico el valor seguiría siendo 0 como en este ejemplo:

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

47

Para cualquier persona que utilice Protractor, no es WebDriver isSelected() exactamente esto.

En lugar de pedir checked atributo que puede hacer:

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

Cuando pruebo este código obtengo la excepción: "estado del elemento no válido: el elemento no se puede interactuar actualmente y no se puede manipular". Alguna idea de cómo resolver esto – Pradeep

+0

De vuelta en mis días de Protractor, resolví el problema del elemento obsoleto con el script [waitReady.js] (https://gist.github.com/elgalu/2939aad2b2e31418c1bb), consulte: http: // stackoverflow .com/questions/35533139/protractor-correct-use-of-waitready-js-file-in-my-tests/35536164 –

+0

Esto debería cambiarse para ser la respuesta aceptada –

Cuestiones relacionadas