一尘不染

如何检查我的元素是否已集中在单元测试中

angularjs

我有以下指令来自动聚焦字段:

.directive('ngAutofocus', function ($timeout) {
    return {
        restrict: 'A',
        link: function (scope, elm) {
                $timeout(function () {
                elm[0].focus();
            });
        }
    };
}

我将如何对此进行单元测试?我尝试了以下选择器之类的几种方法,但是它们都返回错误或false:

console.log($(elm[0]).is(':focus'));

我的单元测试设置如下:

elm = angular.element('<input type="text"  name="textfield1" ng-autofocus>');
$scope.$digest();
$compile(elm)($scope);

阅读 258

收藏
2020-07-04

共1个答案

一尘不染

我想通了,实际上这很明显。

it('should set the focus on timeout', function () {
    spyOn(elm[0],'focus');
    $timeout.flush();
    expect(elm[0].focus).toHaveBeenCalled();
})

我的问题有两个:

  1. 我没有调用超时刷新功能,所以没有发生超时,并且
  2. 我试图查看元素的focus属性,而仅关注focus()函数的调用更像是单元测试。focus属性确实属于e2e测试领域。
2020-07-04