gpt4 book ai didi

unit-testing - angular2 单元测试 : how to test events with triggerEventHandler

转载 作者:太空狗 更新时间:2023-10-29 17:31:13 24 4
gpt4 key购买 nike

我正在尝试使用 angular2 rc1click 事件编写单元测试。我的组件使用 onClick() 方法处理点击事件,并将 name 字段从 bar 更改为 foo。看这个plunker .

现在我想触发一个click 事件来测试name 值是否为bar。请参阅 plunker 上的 unit-testing.spec.ts 文件。

it('should change name from foo to bar on click event', inject([], () => {
return builder.createAsync(UnitTestingComponentTestController)
.then((fixture: ComponentFixture<any>) => {
let query = fixture.debugElement.query(By.directive(UnitTestingComponent));
expect(query).toBeTruthy();
expect(query.componentInstance).toBeTruthy();

// fixture.detectChanges();
expect(query.componentInstance.name).toBe('foo');
query.triggerEventHandler('click',{});
expect(query.componentInstance.name).toBe('bar');
// fixture.detectChanges();
});
}));

这里是 UnitTestingComponentTestController

@Component({
selector: 'test',
template: `
<app-unit-testing></app-unit-testing>
`,
directives: [UnitTestingComponent]
})
class UnitTestingComponentTestController {
}

此测试失败并显示此消息:

Expected 'foo' to be 'bar'.

这是 triggerEventHandler() 的方法签名

triggerEventHandler(eventName: string, eventObj: any): void;

我的问题是如何触发事件并使用 angular2 对其进行测试。

一个解决方案可能是在 componentInstance 上调用 onClick() 方法,但在这种情况下,我们只测试类的 internal 而不是组件行为

最佳答案

看完this文章,现在我可以在我的测试中触发点击事件。此方法不使用 triggerEventHandler .如果您的模板是这样的:

<div class="my-class" (click)="onClick()">
<ul id="my-id">
<li></li>
<li></li>
</ul>
</div>

你可以使用fixture.nativeElement.querySelector(<your selector>).click()selected 元素上触发点击事件。这种方法调用 javascript click()函数(参见 this)

您可以根据其 id 选择元素, class或路径(xpath?)。例如:

fixture.nativeElement.querySelector('.my-class').click()

fixture.nativeElement.querySelector('#my-id').click()

fixture.nativeElement.querySelector('div>ul>li').click()

关于unit-testing - angular2 单元测试 : how to test events with triggerEventHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com