@spartez-software/ui-test-utils

Spartez UI tests helper lib

Usage no npm install needed!

<script type="module">
  import spartezSoftwareUiTestUtils from 'https://cdn.skypack.dev/@spartez-software/ui-test-utils';
</script>

README

spartez test utils (Beta)

Various UI test helpers - jest and puppeteer based

prerequisites

  • ability to run tests using jest

installation

npm install @spartez-software/ui-test-utils --save-dev

setup

  • go get yourself a jira cloud instance
  • setup .env
TEST_JIRA_URL=https://your-cloud-jira-instance-name.atlassian.net
JIRA_ACT_AS_USER=user-be-testing-app@spartez-software.com
JIRA_ACT_AS_USER_PASSWORD=pst! it is a secret!, not a token!

usage (jest/typescript example)

import 'dotenv/config';
import { Browser, Page } from 'puppeteer';
import * as puppeteer from 'puppeteer';
import { step } from '@spartez-software/test-utils';
import {
    cleanupScreenshots, loginToJira, screenshot, setupOutputDirectory,
    forwardConsoleAndRequestsFromBrowser, waitTillHTMLRendered
} from '@spartez-software/ui-test-utils';


describe('jira - login', () => {
    jest.setTimeout(120000);

    const jiraUrl = String(process.env.TEST_JIRA_URL);
    const user = String(process.env.JIRA_ACT_AS_USER);
    const pass = String(process.env.JIRA_ACT_AS_USER_PASSWORD);
    let page : Page;
    let browser : Browser;

    beforeAll(async () => {
        cleanupScreenshots();
        setupOutputDirectory();
        browser = await puppeteer.launch({
            headless: true,
            args: ['--no-sandbox'],
        });
    });

    afterAll(async () => {
        await browser.close();
    });

    beforeEach(async () => {
        page = await browser.newPage();
    });

    afterEach(async () => {
        await screenshot(page);
        await page.close();
    });

    test('Should get valid board id for kanban nextgen', async () => {
        page = await browser.newPage();
        await page.setViewport({
            width: 1920,
            height: 1080,
        });
        await forwardConsoleAndRequestsFromBrowser(page);

        await step(`Login to jira ${jiraUrl}`, async () => {
            await loginToJira(page, jiraUrl, user, pass);
            await waitTillHTMLRendered(page);
        });

        await step('verify jira is there', async () => {
            const jira = await page.$('#jira-frontend');
            expect(jira).toBeDefined();
        })
    });
});

page objects

  • loginToJira() : obvious

helper functions that deserv a bit more explanation

  • async function waitTillHTMLRendered(page: Page, timeout = 30000): Promise<void>
    Waits till pages html becomes stable (page.content().length). Don't use if you have some background tasks changing the page constantly or in an uncontrolled way (periodic, or push for example)
  • async forwardConsoleAndRequestsFromBrowser(page: Page) Promise<void>
    Forwards browser console, pageerror, response and requestfailed events from the browser. Usefull when debuging, but way to verbose to keep it enabled in the CI.