@thisisagile/easy-test-react
Version:
Straightforward wrapper library for testing-library/react
34 lines (28 loc) • 1.39 kB
text/typescript
import { fireEvent, waitFor, waitForElementToBeRemoved } from '@testing-library/react';
import { isDefined, tryTo } from '@thisisagile/easy';
import { Tester } from './Tester';
export class ElementTester {
constructor(readonly element: () => Element) {}
get value(): string {
return (this.element() as any)?.value as string;
}
get isValid(): boolean {
return tryTo(() => this.element())
.is.defined()
.map(() => true)
.or(false);
}
get then(): Tester {
return new Tester(this.element() as HTMLElement);
}
click = (): this | undefined => (this.element() && fireEvent.click(this.element()) ? this : undefined);
awaitClick = (): Promise<boolean> => waitFor(() => fireEvent.click(this.element()));
keyDown = (key: string): this | undefined => (this.element() && fireEvent.keyDown(this.element(), { key }) ? this : undefined);
mouseDown = (index?: number): this | undefined =>
this.element() && fireEvent.mouseDown(isDefined(index) ? this.element().children[index] : this.element()) ? this : undefined;
pressEnter = (): this | undefined => this.keyDown('Enter');
clear = (): boolean => this.type('');
type = (value: string): boolean => fireEvent.change(this.element(), { target: { value } });
wait = (): Promise<Element> => waitFor(this.element);
waitForRemove = (): Promise<void> => waitForElementToBeRemoved(this.element);
}