我有个简单的案子。标准
AppComponent
角度应用程序的
ChildComponent
在它自己的模块中定义的
ChildModule
是的。
的模板
子组件
很简单
<div class="child" (click)="testClick($event)"></div>
子组件
有一个更简单的
testClick(event)
只在控制台上记录消息的方法。
testClick(event) {
console.log(event);
}
现在我想建立一个测试
附加组件
模拟点击
子组件
是的。
这是测试代码
describe('AppComponent', () => {
let fixture: ComponentFixture<AppComponent>;
let app: AppComponent;
let child: DebugElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ ChildModule ],
declarations: [
AppComponent
],
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
app = fixture.debugElement.componentInstance;
child = fixture.debugElement.query(By.css('.child'));
fixture.detectChanges();
});
it(`should create the child'`, async(() => {
expect(child).toBeTruthy();
}));
it(`clicks on the child and the relative Observable emits`, async(() => {
setTimeout(() => {
child.triggerEventHandler('click', 'clicked');
}, 100);
}));
});
测试工作,特别是第二个测试打印
clicked
控制台上的消息。
现在我有点复杂了
子组件
. 我想在
click
事件使用
fromEvent
操作员和
ViewChild
是的。
所以代码变成
export class ChildComponent implements AfterViewInit {
@ViewChild('child') private childElement: ElementRef;
ngAfterViewInit() {
const testClick$ = fromEvent(this.childElement.nativeElement, 'click');
testClick$.subscribe(d => console.log('test click in child', d));
}
}
我用
ng serve
我在控制台上看到两条信息,一条是
testClick
方法,并通过订阅
testClick$
可观察的。
如果我现在运行与以前相同的测试,我希望在控制台上也会看到相同的两条消息相反,我只看到
测试单击
方法。订阅的消息,即
'test click in child'
,不出现,这意味着
测试单击$
不发射时
child.triggerEventHandler('click', 'clicked');
被处决。
我怎样才能用
来自事件
工作
茉莉
测验?我做错什么了?