测试ES5中的Angular 2组件?

本·迪尔特斯

我正在启动一个新的Angular 2应用程序。我有一个简单的组件,它实际上是一个下拉选择框。该组件将一些对象作为属性(在应用程序中,通过包含模板中组件的DOM元素上的属性)。

Angular 2的官方文档尚无测试组件的示例。我将如何测试组件的实际视图-检查是否根据在组件上设置的数据创建了适当的DOM元素?

我可以通过这样做来创建我的组件之一ng.core.Injector.resolveAndCreate([...dependencies...]).get(MyClassName)但这实际上并不能构造视图,也不能让我传入要设置为刚创建的组件属性的数据。

埃里克·马丁内斯(Eric Martinez)

遵循您在文档和回购源代码中看到的内容并不困难。这是我所做的设置,它可以正常工作。

首先从文档中,我选择了茉莉花示例设置

<link rel="stylesheet" href="node_modules/jasmine-core/lib/jasmine-core/jasmine.css">
<script src="node_modules/jasmine-core/lib/jasmine-core/jasmine.js"></script>
<script src="node_modules/jasmine-core/lib/jasmine-core/jasmine-html.js"></script>
<script src="node_modules/jasmine-core/lib/jasmine-core/boot.js"></script>

然后是angular2的设置。您可能已经知道,当您在ES5中编写代码时,必须使用UMD捆绑软件

<script src="node_modules/angular2/bundles/angular2-polyfills.js"></script>
<script src="node_modules/rxjs/bundles/Rx.umd.min.js"></script>
<script src="node_modules/angular2/bundles/angular2-all-testing.umd.dev.js"></script>

现在重要的部分是测试。这里的主要任务是创建一个测试组件

var TestComponent = ng.core.
    Component({
        selector: 'cmp',
        template : '' // Left it blank, we override it when testing
    }).Class({
        constructor: function() {
            this.someProperty = 'Initial value';
        }
    });

创建组件之后,可以使用TestComponentBuilder对其进行测试

ng.testing.describe('Component building', function() {

    ng.testing.it('should detect when a property changes', 
        ng.testing.inject([ng.testing.TestComponentBuilder], function(tcb) {
            tcb
                .overrideTemplate(TestComponent, '<div>{{someProperty}}</div>')
                .createAsync(TestComponent)
                .then(function(fixture) {

                    // Triggers change detection so 
                    // the div actually contains the property value
                    fixture.detectChanges();

                    // Check if the div contains the correct value
                    expect(fixture.nativeElement.innerText).toEqual('Initial value');

                    // Change property's value
                    fixture.componentInstance.someProperty = 'New value';

                    // Triggers change detection again
                    fixture.detectChanges();

                    // Check, again, if the div contains the new value
                    expect(fixture.nativeElement.innerText).toEqual('New value');
                });
        }));
});

请注意,我ng.testing.(describe/it/etc)之所以使用是因为茉莉花的那些功能已被修补以与angular2一起使用。

从这一点开始,将非常容易继续。您已经拥有整个仓库,可以查看其规格NgFor是一个有趣的例子您可以遵循TS / ES6示例,它们是相同的。

这是带有复制功能plnkr

参考

您也可以在AngularConnect 2015上查看Julie Ralph的回购(ng2-test-seed)和她的演讲

希望对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问Angular2 JavaScript ES5组件中的元素

来自分类Dev

如何在ES5中将升级的Angular 1服务/工厂注入Angular 2组件?

来自分类Dev

Angular 2组件动态名称

来自分类Dev

Angular 2组件和CRUD

来自分类Dev

Angular 2组件未显示

来自分类Dev

输入的Angular 2组件样式

来自分类Dev

Angular 2组件与Portlet

来自分类Dev

Angular 2组件不显示

来自分类Dev

Angular 2组件问题

来自分类Dev

Angular 2组件中的组件不显示?

来自分类Dev

Angular 2组件到组件的通信

来自分类Dev

测试使用setInterval或setTimeout的Angular2组件

来自分类Dev

Angular 2组件中的Google AdSense广告?

来自分类Dev

从Angular 2组件中访问`selector`

来自分类Dev

Angular 2组件选择器中的条件

来自分类Dev

从Angular 2组件中访问`selector`

来自分类Dev

Angular 2组件中的Google AdSense广告?

来自分类Dev

Angular 2组件中未显示JSON数据

来自分类Dev

从html事件中调用Angular 2组件方法

来自分类Dev

JS中的Angular2组件通信

来自分类Dev

如何从Angular 2组件中更改CSS样式

来自分类Dev

RxJS主题和Angular 2组件

来自分类Dev

尝试在angular2组件中使用exportAs

来自分类Dev

实例Angular 2组件两次

来自分类Dev

Angular 2组件* ngFor模板解析错误

来自分类Dev

扩展/装饰Angular 2组件和指令

来自分类Dev

CodeMirror作为Angular2组件

来自分类常见问题

Angular 2组件构造函数与OnInit

来自分类Dev

Angular 2组件路由器