angularjs - ng bind w3



Angular directive testing select options (3)

¿Cómo se selecciona una opción en una prueba de directiva angular?

 var options = elem.find('#test-code-select option');
 expect(angular.element(options[0]).text()).to.equal('234');
 expect(angular.element(options[1]).text()).to.equal('236');

Funcionan bien, pero ¿cómo forzar manualmente la selección de una opción?

angular.element(options[1]).click(); //nope
angular.element(options[1]).trigger('click'); //nope
angular.element(options[1]).attr('selected', true); //nope

EDITAR:

La plantilla directiva incluye una selección con un modelo interno ng, sospecho que esta es la causa del problema:

<select id='test-code-select' ng-options='code as code for code in codeList' ng-model='code'>

Si solo desea probar el controlador de clics, solo debe activar un evento de clic:

angular.element(options[1]).trigger('click');

Es posible que deba permitir que los distintos manejadores ejecuten usando $ timeout.flush (), $ scope.apply (), y / o poniendo su código de verificación en un bloque de $ timeout.


Esto funciona para mí:

var select = elem.find('#test-code-select');
select.val('236').change();
expect(scope.code).toEqual('236');

Tenga en cuenta la llamada a change() .


Añadí esto como otro enfoque además de lo que ha respondido @ejain.

Si tiene jquery disponible (es decir, no jqLite), creo que lo siguiente también debería funcionar activando el change en la opción:

var select = elem.find('#test-code-select');
var oneOption = select.find('option:contains("236")');
oneOption.prop('selected', 'selected').trigger('change');
expect(scope.code).toEqual('236');




angularjs-directive