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