dart - 如何在Angular组件测试中查询shadowDOM

标签 dart angular-dart

我具有此单元测试设置,并且想要检查shadowDOM元素的<rating>
但是shadowDOM没有子节点。

在下面的代码中,我尝试检查getStars()方法中的元素shadowDOM。

我的方法有缺陷吗?
应该行吗?

library bootstrap_angular.test.elements.rating;

import 'dart:html' as dom;
import 'dart:async';
import 'package:unittest/unittest.dart';
import 'package:unittest/html_enhanced_config.dart';
import 'package:angular/angular.dart' as ng;
import 'package:angular/mock/module.dart' as ngMock;

import 'package:bootstrap_angular/rating/rating.dart';

void main() {
  useHtmlEnhancedConfiguration();

  ng.Scope _rootScope;
  dom.Element _element;
  ngMock.TestBed _tb;
  ngMock.MockHttpBackend _backend;

  setUp(() {
    Future f;
    try {
    ngMock.setUpInjector();

      ngMock.module((ng.Module module) {
        module.install(new RatingModule());
      });

      ngMock.inject((ng.Scope scope, ngMock.TestBed testBed) {
        _rootScope = scope;
        _rootScope['rate'] = 3;
        _tb = testBed;

        f = dom.HttpRequest.getString('/bootstrap_angular/packages/bootstrap_angular/rating/rating.html')
        .then((ratingTemplate) {
          _backend = new ngMock.MockHttpBackend();

          assert(ratingTemplate.contains('<i '));
          _backend.expect('GET').respond(ratingTemplate);

          _element = _tb.compile('<rating value="rate"></rating>', scope: _rootScope);
          var element =_element.shadowRoot.querySelector('i');
          _rootScope.$digest();
        }).catchError((e) => print(e));
      });
    } catch(e) {
      print(e);
    }
    return f;
  });

  List<dom.Element> getStars() {
    print(_element.shadowRoot.querySelectorAll('i'));
    return _element.shadowRoot.querySelectorAll('i');
  }

  test("rating component", ( ) {
    expect(getStars().length, equals(3));
  });
}

从HTTP请求返回的元素模板HTML

    <span ng-mouseleave="ctrl.reset()">
      <i ng-repeat="r in ctrl.range" ng-mouseenter="ctrl.enter($index + 1)" ng-click="ctrl.rate($index + 1)" class="glyphicon" ng-class="ctrl.stateClass($index, r)"></i>
    </span>

最佳答案

您的基本方法应该有效。

对于AngularDart测试,我们在test/_specs.dart中有一个JQuery类,它可以处理窥探影子DOM。例如,参见JQuery.textWithShadow()方法。

查看您发布的代码,我怀疑您处于竞争状态,因为您没有等待编译完成。根据评级组件,编译可能是异步的:可能需要刷新MockHttpBackend。

在AngularDart测试中,我们使用async()概念来处理此问题,如果您将Futures挂起,它将使您的测试失败。请参阅AngularDart Github存储库中的lib/mock/zone

关于dart - 如何在Angular组件测试中查询shadowDOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21061629/

相关文章:

angularjs - Angular Dart : ng-switch in ng-repeat

Angular 形式 : "No value accessor for ..."

flutter - 如何解决此 StackOverflow 错误

testing - 如何测试 polymer Dart

dart - 有没有人设法从谷歌登录 (Flutter) 获取 id token

dart - 使用 dart web 应用程序 http 时获取/设置 cookie

flutter - 无法从 Flutter 中的 TextField 和 TextFormField 中删除底部填充

dart - flutter : How to specify a device id in flutter?

dart - 在 Angular Dart 中访问路由参数

dart - AngularDart 中的 somecomponent.template.dart 导入指向什么?