2

我试图在单元测试的选择框中突出显示 1 个或多个项目。我正在使用 Karma、Jasmine 和 PhantomJS、AngularJS、JQLite、CoffeeScript。

我的列表中有项目 ["banana"、"apple"、"orange"]。

我尝试直接设置值:

sourceList = element.find('select').eq(1)
sourceList.val("[banana]").triggerHandler('change');
// Or
sourceList.val("banana").triggerHandler('change');

当我得到 sourceList.val() 它没有设置。

我尝试触发事件来选择它。请注意,我不能执行“单击”事件,因为单击时会触发另一个事件。

sourceList.find('option').eq(0).triggerHandler("active");
sourceList.find('option').eq(0).triggerHandler("focus");
sourceList.find('option').eq(0).triggerHandler("drag");
sourceList.find('option').eq(0).triggerHandler("dragLeave");

我尝试使用selectedIndex

sourceList.selectedIndex = 1

这些似乎都没有突出显示或选择该项目。我没主意了。有没有人做到这一点?

这是我要测试的指令的方法:

// Clicks on the add button. Should take all items highlighted and move them over
   $scope.add = function(){
        var sourceList = $element.find('select').eq(1);
        angular.forEach(sourceList.val(), function(val, index){
             $scope.selected.push({
                    text: val
             });
         });
         checkListDupes();
     };

当我在浏览器中手动执行此代码时,此代码有效,但在单击添加按钮之前,我似乎无法让我的测试突出显示选择框中的某些项目。所以当这段代码执行时,sourceList.val() 等于 []。

4

1 回答 1

0

聚会有点晚了,但我会把它留给有同样问题的其他人。
我不知道您是如何为选择框构建选项的,但sourceList.val("banana").triggerHandler('change'); 只要选项的值为香蕉,就应该可以正常工作。如果您没有在 ng-options 上指定 track by,则 angular 创建的默认值应该可以解决'string:'+<option label>问题sourceList.val('string:banana').triggerHandler('change');

于 2016-03-30T19:29:58.883 回答