Make messages test less flaky

This commit is contained in:
Jannis Mattheis 2018-10-21 15:41:01 +02:00
parent c08a9f3814
commit 865aaa3f85
2 changed files with 22 additions and 10 deletions

View File

@ -1,7 +1,7 @@
// todo before all tests jest start puppeteer // todo before all tests jest start puppeteer
import {Page} from 'puppeteer'; import {Page} from 'puppeteer';
import {newTest, GotifyTest} from './setup'; import {newTest, GotifyTest} from './setup';
import {clickByText, count, innerText, waitForExists} from './utils'; import {clickByText, count, innerText, waitForCount, waitForExists} from './utils';
import * as auth from './authentication'; import * as auth from './authentication';
import * as selector from './selector'; import * as selector from './selector';
import axios from 'axios'; import axios from 'axios';
@ -91,7 +91,8 @@ describe('Messages', () => {
await navigate('All Messages'); await navigate('All Messages');
}); });
const extractMessages = async () => { const extractMessages = async (expectCount: number) => {
await waitForCount(page, '#messages .message', expectCount);
const messages = await page.$$(`#messages .message`); const messages = await page.$$(`#messages .message`);
const result: Msg[] = []; const result: Msg[] = [];
for (const item of messages) { for (const item of messages) {
@ -128,27 +129,27 @@ describe('Messages', () => {
backup: Msg[]; backup: Msg[];
}) => { }) => {
await navigate('All Messages'); await navigate('All Messages');
expect(await extractMessages()).toEqual(toCheck.all); expect(await extractMessages(toCheck.all.length)).toEqual(toCheck.all);
await navigate('Windows'); await navigate('Windows');
expect(await extractMessages()).toEqual(toCheck.windows); expect(await extractMessages(toCheck.windows.length)).toEqual(toCheck.windows);
await navigate('Linux'); await navigate('Linux');
expect(await extractMessages()).toEqual(toCheck.linux); expect(await extractMessages(toCheck.linux.length)).toEqual(toCheck.linux);
await navigate('Backup'); await navigate('Backup');
expect(await extractMessages()).toEqual(toCheck.backup); expect(await extractMessages(toCheck.backup.length)).toEqual(toCheck.backup);
await navigate('All Messages'); await navigate('All Messages');
}; };
it('create a message', async () => { it('create a message', async () => {
await createMessage(windows1, windowsServerToken); await createMessage(windows1, windowsServerToken);
expect(await extractMessages()).toEqual([windows1]); expect(await extractMessages(1)).toEqual([windows1]);
}); });
it('has one message in windows app', async () => { it('has one message in windows app', async () => {
await navigate('Windows'); await navigate('Windows');
expect(await extractMessages()).toEqual([windows1]); expect(await extractMessages(1)).toEqual([windows1]);
}); });
it('has no message in linux app', async () => { it('has no message in linux app', async () => {
await navigate('Linux'); await navigate('Linux');
expect(await extractMessages()).toEqual([]); expect(await extractMessages(0)).toEqual([]);
await navigate('All Messages'); await navigate('All Messages');
}); });
describe('add some messages', () => { describe('add some messages', () => {
@ -262,7 +263,8 @@ describe('Messages', () => {
await page.click('#delete-all'); await page.click('#delete-all');
await navigate('All Messages'); await navigate('All Messages');
await createMessage(backup3, backupServerToken); await createMessage(backup3, backupServerToken);
expect(await extractMessages()).toEqual([backup3]); await waitForExists(page, '.message .title', backup3.title);
expect(await extractMessages(1)).toEqual([backup3]);
}); });
it('does logout', async () => await auth.logout(page)); it('does logout', async () => await auth.logout(page));
}); });

View File

@ -33,6 +33,16 @@ export const waitToDisappear = async (page: Page, selector: string): Promise<voi
); );
}; };
export const waitForCount = async (page: Page, selector: string, amount: number): Promise<void> => {
return page.waitForFunction(
(_selector: string, _amount: number) =>
document.querySelectorAll(_selector).length === _amount,
{},
selector,
amount
);
};
export const waitForExists = async (page: Page, selector: string, text: string): Promise<void> => { export const waitForExists = async (page: Page, selector: string, text: string): Promise<void> => {
text = text.toLowerCase(); text = text.toLowerCase();
await page.waitForFunction( await page.waitForFunction(