You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
// tslint:disable: no-console
|
|
// tslint:disable no-implicit-dependencies
|
|
import { expect } from 'chai';
|
|
import { _electron as electron, ElectronApplication, Page } from 'playwright';
|
|
|
|
const NODE_ENV = 'integration-test';
|
|
|
|
function throwIfNoFirstInstance(
|
|
instanceToCastIfValid: ElectronApplication | null,
|
|
pageToCastIfValid: Page | null
|
|
): { instance: ElectronApplication; page: Page } {
|
|
if (!instanceToCastIfValid) {
|
|
throw new Error('no instanceToCastIfValid');
|
|
}
|
|
if (!pageToCastIfValid) {
|
|
throw new Error('no pageToCastIfValid');
|
|
}
|
|
return { page: pageToCastIfValid, instance: instanceToCastIfValid };
|
|
}
|
|
|
|
async function createAppInstance(MULTI: number) {
|
|
// Launch Electron app.
|
|
process.env.NODE_ENV = NODE_ENV;
|
|
process.env.NODE_APP_INSTANCE = `${MULTI}`;
|
|
const instance = await electron.launch({
|
|
args: ['main.js'],
|
|
});
|
|
|
|
// Get the first window that the app opens, wait if necessary.
|
|
const page = await instance.firstWindow();
|
|
// page.on('console', console.log);
|
|
return { instance, page };
|
|
}
|
|
|
|
async function killAppInstance(appInstance?: ElectronApplication | null) {
|
|
// Kill Electron app.
|
|
if (appInstance) {
|
|
await appInstance.close();
|
|
}
|
|
return null;
|
|
}
|
|
|
|
describe('quick test', () => {
|
|
let firstAppInstance: ElectronApplication | null = null;
|
|
let firstAppPage: Page | null = null;
|
|
|
|
beforeEach(async () => {
|
|
if (firstAppInstance) {
|
|
throw new Error('beforeAll cannot create first instance');
|
|
}
|
|
const { instance, page } = await createAppInstance(1);
|
|
firstAppInstance = instance;
|
|
firstAppPage = page;
|
|
});
|
|
|
|
afterEach(async () => {
|
|
firstAppInstance = await killAppInstance(firstAppInstance);
|
|
});
|
|
|
|
it('check "Begin your Session" is shown on app start', async () => {
|
|
const { instance, page } = throwIfNoFirstInstance(firstAppInstance, firstAppPage);
|
|
// Evaluation expression in the Electron context.
|
|
const appPath = await instance.evaluate(async ({ app }) => {
|
|
// This runs in the main Electron process, parameter here is always
|
|
// the result of the require('electron') in the main app script.
|
|
return app.getAppPath();
|
|
});
|
|
console.log(appPath);
|
|
// Print the title.instance
|
|
const title = await page.title();
|
|
|
|
const beginSessionSelector = await page.waitForSelector(
|
|
'div.session-content-accent-text.title'
|
|
);
|
|
const contentBeginYourSession = await beginSessionSelector.innerHTML();
|
|
expect(contentBeginYourSession).to.equal('Begin your Session.');
|
|
|
|
expect(title).to.eq('Session');
|
|
});
|
|
});
|