web-dev-qa-db-fra.com

Comment valider lorsqu'une case est cochée dans les tests AngularJS e2e?

J'ai essayé les tests AngularJS e2e et je suis coincé à déterminer si une case à cocher est cochée ou non.

J'ai utilisé le test de bout en bout pour le entrée de la case à cocher comme exemple (voir l'onglet Test de bout en bout dans l'onglet Exemple ).

Extrait HTML:

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

Extrait de contrôleur:

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

Voici ce que j'ai essayé:

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

Cela fonctionne dans l'exemple de test de bout en bout tant que value1 Est affiché à l'écran avec {{value1}}. Si vous testez cela localement et supprimez `{{value1}}, le test de liaison échoue. Dans la plupart de mes exemples réels, je n'affiche la valeur de la case à cocher à l'écran nulle part.

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

La valeur sera toujours par défaut à on et n'est pas liée au fait que la case à cocher soit ou non dans un état coché (tiré de ce message ).


Remarque: Il semble que le test Angular E2E sera remplacé par Protractor dans le avenir (voir la documentation )

30
Gloopy

J'ai surévalué cette question car j'avais le même problème. J'ai utilisé la solution de contournement suivante dans mon test, mais j'espère voir la meilleure façon.

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

Pour toute personne utilisant Protractor , il y a un pilote Web isSelected () pour exactement cela.

Au lieu de demander l'attribut checked, vous pouvez faire:

expect(element(by.model('value1')).isSelected()).toBeTruthy();
54
Leo Gallucci

J'espère qu'il existe un meilleur moyen, mais j'ai contourné cela en validant le nombre d'éléments d'entrée vérifiés correspondant à cette liaison de modèle:

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

Au moins un inconvénient lors de la vérification si quelque chose n'est pas vérifié est si l'élément n'existe pas ou s'il y avait une faute de frappe, la valeur serait toujours 0 comme dans cet exemple:

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

1
Gloopy