我正在尝试 E2E 测试我的 angularjs 应用程序。它有一个 select2 选择框,其中填充了来自 API 的项目。此 select2 选择框包含将添加到搜索中的过滤器列表。
<input id="filter-select2" ui-select2="dataArray" ng-model="selected"/>
我遇到的问题是我似乎无法在正在进行的 E2E 测试中打开选择框。如果我加载应用程序,我可以执行 $('#s2id_filter-select2').select2('open');
在 Chrome Javascript 控制台中打开 select2 选择框。我也可以做angular.element('#s2id_filter-select2').select2('open');
。
但是,如果我尝试在 E2E 测试中执行此操作,该元素似乎没有 .select2()
.
我都尝试了element('#s2id_filter-select2').select2('open');
和
element('#s2id_filter-select2').query(function (e, done) {
e.select2('open');
done();
});
在E2E测试中。我可以调用.fadeOut()
在后一个示例中( element().query()
),但不是 .select2()
。
我尝试在 E2E 测试配置中包含 select2.js 和 angularui.js (我正在使用 Angular-ui 中的指令),但这不会改变任何内容。
有没有人在 E2E 测试中成功调用一些 jQuery 库(例如 select2)?
我还考虑过跳过 select2 框,即直接设置“选定”模型,因为我有一个 $watch 可以更新过滤器选择上的应用程序,但我似乎找不到一种方法通过测试本身设置模型。
e2e 配置使用以下文件:
files = [
ANGULAR_SCENARIO,
ANGULAR_SCENARIO_ADAPTER,
'tests/students/scenarios/*.scenario.js',
'dev/students/js/script.js',
'dev/students/js/*.js'
];
我尝试在tests/和dev/文件之前和之后都包含select2、jQuery和Angular-ui。
编辑:我可以使用 input('selected').enter('sth');
设置所选模型,但我似乎无法将其设置为模型。我可能需要为此编写一个自定义 DSL?
最佳答案
您确实可以使用自定义 DSL 在 Angular e2e 测试中打开 select2 框。我不相信以下代码块,我在以下位置找到它: How to execute jQuery from Angular e2e test scope?
通过添加:
angular.scenario.dsl('jQueryFunction', function() {
return function(selector, functionName /*, args */) {
var args = Array.prototype.slice.call(arguments, 2);
return this.addFutureAction(functionName, function($window, $document, done) {
var $ = $window.$; // jQuery inside the iframe
var elem = $(selector);
if (!elem.length) {
return done('Selector ' + selector + ' did not match any elements.');
}
done(null, elem[functionName].apply(elem, args));
});
};
});
在 e2e 测试文件的顶部,您可以打开一个 select2 框,如下所示:
jQueryFunction('#s2id_roleselect', 'select2', 'open');
用您自己的 ID 替换 roleselect。所有功劳都归于用户 Jeroen V. 提供的 DSL。
关于jquery - 在angularjs E2E测试中打开一个select2选择框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16530000/