Angular指令测试选择选项

时间:2015-05-27 23:07:17

标签: angularjs angularjs-directive

如何在角度指令测试中选择一个选项?

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

这些工作正常,但如何手动强制选择选项?

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

编辑:

指令模板包含一个带内部ng模型的select,我怀疑这是问题的原因:

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

4 个答案:

答案 0 :(得分:10)

这对我有用:

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

请注意对change()的调用。

答案 1 :(得分:0)

如果您只想测试点击处理程序,则只需触发点击事件:

upstream

您可能必须允许使用$ timeout.flush(),$ scope.apply()和/或将验证码放在$ timeout块中来执行各种处理程序。

答案 2 :(得分:0)

// UPDATE: to select multiple values pass an array
// select is selector for <select> tag, preferrably ID
select.val(['236', '479']).change();

答案 3 :(得分:0)

除了@ejain已经回答的问题之外,我还把它作为另一种方法。

如果你有jquery avaiable(即不是jqLit​​e),我认为通过触发change选项也可以使用以下内容:

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