RXJS from() 不会在 concatMap() 中执行



我试图与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());

相关内容

  • 没有找到相关文章

最新更新