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
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.