如何在角度指令测试中选择一个选项?
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'>
答案 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(即不是jqLite),我认为通过触发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');