Rendering from App-level to create multiple tests that work through several UI to test.
describe("<App />", () => {
let server: any = null;
beforeEach(() => {
jest.resetModules();
server = makeServer({ environment : "test" });
});
afterEach(() => {
server.shutdown();
});
test("login list modules edit 1st module", async () => {
const result = render(<App />);
const user = userEvent.setup();
const btnLogin = screen.getByText(/Login/i) as HTMLButtonElement;
expect(btnLogin.disabled).toBe(false);
await userEvent.click(btnLogin);
let btnOk = screen.queryByText(/OK/i) as HTMLButtonElement;
if (btnOk == null) {
//already logged in
return;
}
expect(btnOk.disabled).toBe(true);
let btnCancel = screen.getByText(/Cancel/i) as HTMLButtonElement;
expect(btnCancel.disabled).toBe(false);
fireEvent.change(screen.getByLabelText(/Access Code/i) as HTMLInputElement, { target: { value: 'USER' } });
expect(btnOk.disabled).toBe(false);
await userEvent.click(btnOk);
let orig_list: HTMLElement[] = []
await waitFor(() => {
orig_list = screen.queryAllByRole(/contentinfo/i);
expect(orig_list.length).toBeGreaterThanOrEqual(3);
});
// Waiting for list to load.
const settings = screen.getAllByTestId('settings') as HTMLElement[];
expect(settings.length).toBeGreaterThanOrEqual(3);
await user.click(settings[0]);
const edit = screen.getByTestId('EDIT');
await user.click(edit);
const googleId = screen.getByLabelText('Google Sheet ID');
fireEvent.change(googleId, { target: { value: '1JPxMDvRfFS0HF60HZZRoa64LxSGOQFIay1SeccvTest' } });
const saveModuleDiaLog = screen.getByTestId('saveModuleDiaLog') as HTMLButtonElement;
await user.click(saveModuleDiaLog);
});
});
I have multiple tests that do this process.
My issue is locally everything runs fine. When I run it in a BitBucket pipeline it appears to hang.
afterEach
to clear memory?--runInBand
flag. But it would be better to refactor the server part such that there is one of those shared between all test files.