我试图与Jasmine一起运行测试,单击将值复制到剪贴板的按钮。然后,我试图读取保存在剪贴板中的值。
我不确定我在这里做错了什么,但是我在控制台中得到的输出是这样的:
timer 1
我希望在控制台中看到的是:
timer 1
read
timer 2
我使用的Jasmine代码是这样的:
it('should copy input value', () => {
const click = component.clickButton('buttonElRef');
click.subscribe(value => {
console.log('v', value);
});
});
Angular的测试组件是这样的:
class CopyToClipboardTest {
clickButton(which: 'buttonObjRef' | 'buttonElRef'): Observable<string> {
this[which].nativeElement.click();
return timer(100).pipe(
tap(() => console.log('timer 1')),
concatMap(() => this.getClipboard()),
tap(() => console.log('timer 2')),
);
}
getClipboard(): Observable<string> {
return from(navigator.clipboard.readText()).pipe(tap(() => console.log('read')));
}
}
所以,当使用剪贴板时,你需要在执行剪贴板事件之前给窗口焦点。
这修复了这个问题(它似乎不工作在自动加载):
beforeAll(() => window.focus());