test(menu): migrate e2e tests (#16032)

references #15803
This commit is contained in:
Cam Wiegert
2018-10-22 17:13:23 -05:00
committed by GitHub
parent ce80b2470e
commit d033a9e544
7 changed files with 118 additions and 280 deletions

View File

@@ -1,24 +0,0 @@
'use strict';
const { By, until } = require('selenium-webdriver');
const { register, Page, platforms } = require('../../../../../scripts/e2e');
class E2ETestPage extends Page {
constructor(driver, platform) {
super(driver, `http://localhost:3333/src/components/menu/test/basic?ionic:mode=${platform}`);
}
}
platforms.forEach(platform => {
describe('menu/basic', () => {
register('should init', driver => {
const page = new E2ETestPage(driver, platform);
return page.navigate('#left');
});
register('should Open start menu', driver => {
const page = new E2ETestPage(driver, platform);
return page.present('#left', { waitFor: '.menu-inner' });
});
});
});

View File

@@ -0,0 +1,29 @@
import { newE2EPage } from '@stencil/core/testing';
test('menu: basic', async () => {
const page = await newE2EPage({
url: '/src/components/menu/test/basic?ionic:_testing=true'
});
const start = await page.find('ion-menu[side="start"]');
expect(start).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-start'
]);
await start.callMethod('open');
expect(await page.compareScreenshot('start menu')).toMatchScreenshot();
await start.callMethod('close');
const end = await page.find('ion-menu[side="end"]');
expect(end).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-end'
]);
await end.callMethod('open');
expect(await page.compareScreenshot('end menu')).toMatchScreenshot();
});

View File

@@ -8,168 +8,54 @@
<script src="/dist/ionic.js"></script>
<link rel="stylesheet" href="/css/ionic.bundle.css">
<link rel="stylesheet" href="/scripts/testing/styles.css">
<style>
.f {
width: 200px;
height: 200px;
background: blue;
margin: 20px auto;
}
</style>
</head>
<body>
<ion-app>
<ion-modal-controller></ion-modal-controller>
<ion-menu side="start" class="e2eLeftMenu">
<ion-menu side="start">
<ion-header>
<ion-toolbar color="secondary">
<ion-title>Left Menu</ion-title>
<ion-toolbar>
<ion-title>Start Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item button onclick="openEnd()">Open end Menu</ion-item>
<ion-item button onclick="createModal()">Open Modal</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
</ion-list>
</ion-content>
<ion-footer>
<ion-toolbar color="secondary">
<ion-title>Footer</ion-title>
</ion-toolbar>
</ion-footer>
</ion-menu>
<ion-menu side="end">
<ion-header>
<ion-toolbar>
<ion-title>Hola</ion-title>
<ion-title>End Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
hola macho
<ion-content>
<ion-list>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
</ion-list>
</ion-content>
</ion-menu>
<div class="ion-page" main>
<ion-header>
<ion-toolbar>
<ion-title>Menu - Basic</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<p>
<ion-button id="left" onclick="openStart()">Open start menu</ion-button>
<ion-button onclick="openEnd()">Open end menu</ion-button>
</p>
<p>
<ion-button onclick="setPush()">Set Push</ion-button>
<ion-button onclick="setOverlay()">Set Overlay</ion-button>
<ion-button onclick="setReveal()">Set Reveal</ion-button>
<ion-button onclick="setEnabled()">Set Swipe Enabled False</ion-button>
</p>
<div class="f"></div>
<div class="f"></div>
<div class="f"></div>
<div class="f"></div>
<div class="f"></div>
<div class="f"></div>
</ion-content>
</div>
</ion-app>
<ion-menu-controller></ion-menu-controller>
<script>
const menu = document.querySelector('ion-menu-controller');
start();
async function start() {
await menu.componentOnReady();
menu.open('start');
}
function openStart() {
console.log('Open start menu');
menu.open('start');
}
function openEnd() {
console.log('Open end menu');
menu.open('end');
}
async function setPush() {
(await menu.get('start')).type = 'push';
(await menu.get('end')).type = 'push';
}
async function setOverlay() {
(await menu.get('start')).type = 'overlay';
(await menu.get('end')).type = 'overlay';
}
async function setReveal() {
(await menu.get('start')).type = 'reveal';
(await menu.get('end')).type = 'reveal';
}
async function setEnabled() {
(await menu.get('start')).swipeGesture = false;
}
async function createModal() {
// initialize controller
const modalController = document.querySelector('ion-modal-controller');
await modalController.componentOnReady();
// create component to open
const element = document.createElement('div');
element.innerHTML = `
<ion-header>
<ion-toolbar>
<ion-title>Super Modal</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<h1>Content of doom</h1>
<div>Here's some more content</div>
<ion-button class="dismiss">Dismiss Modal</ion-button>
</ion-content>
`;
// listen for close event
const button = element.querySelector('ion-button');
button.addEventListener('click', () => {
modalController.dismiss();
});
// present the modal
const modalElement = await modalController.create({
component: element
});
await modalElement.present();
return modalElement;
}
</script>
</body>
</html>

View File

@@ -1,35 +0,0 @@
import { newE2EPage } from '@stencil/core/testing';
describe('menu', () => {
it('should open menu', async () => {
// create a new e2e test page
const page = await newE2EPage({
html: `
<ion-app>
<ion-menu type="overlay">
<ion-content>Content</ion-content>
</ion-menu>
<div main></div>
</ion-app>
`
});
const menu = await page.find('ion-menu');
expect(menu).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-start',
]);
await menu.callMethod('open', false);
await page.waitForChanges();
expect(menu).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-start',
]);
});
});

View File

@@ -1,19 +0,0 @@
'use strict';
const { By, until } = require('selenium-webdriver');
const { register, Page, platforms } = require('../../../../../scripts/e2e');
class E2ETestPage extends Page {
constructor(driver, platform) {
super(driver, `http://localhost:3333/src/components/menu/test/standalone?ionic:mode=${platform}`);
}
}
platforms.forEach(platform => {
describe('menu/standalone', () => {
register('should init', driver => {
const page = new E2ETestPage(driver, platform);
return page.navigate('.ion-page');
});
});
});

View File

@@ -0,0 +1,29 @@
import { newE2EPage } from '@stencil/core/testing';
test('menu: standalone', async () => {
const page = await newE2EPage({
url: '/src/components/menu/test/standalone?ionic:_testing=true'
});
const start = await page.find('ion-menu[side="start"]');
expect(start).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-start'
]);
await start.callMethod('open');
expect(await page.compareScreenshot('start menu')).toMatchScreenshot();
await start.callMethod('close');
const end = await page.find('ion-menu[side="end"]');
expect(end).toHaveClasses([
'menu-type-overlay',
'menu-enabled',
'menu-side-end'
]);
await end.callMethod('open');
expect(await page.compareScreenshot('end menu')).toMatchScreenshot();
});

View File

@@ -4,84 +4,56 @@
<head>
<meta charset="UTF-8">
<title>Menu - Standalone</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<script src="/dist/ionic.js"></script>
<link rel="stylesheet" href="/css/core.css">
<link rel="stylesheet" href="/css/ionic.bundle.css">
<link rel="stylesheet" href="/scripts/testing/styles.css">
</head>
<body>
<ion-menu side="start">
<ion-header>
<ion-toolbar color="secondary">
<ion-title>Left Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-menu side="start">
<ion-header>
<ion-toolbar>
<ion-title>Start Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
</ion-list>
</ion-content>
</ion-menu>
<ion-content>
<ion-list>
<ion-item>Open end Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
<ion-item>Close Menu</ion-item>
</ion-list>
</ion-content>
<ion-menu side="end">
<ion-header>
<ion-toolbar>
<ion-title>End Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
<ion-item>Menu Item</ion-item>
</ion-list>
</ion-content>
</ion-menu>
<ion-footer>
<ion-toolbar color="secondary">
<ion-title>Footer</ion-title>
</ion-toolbar>
</ion-footer>
<div class="ion-page" main>
<ion-header>
<ion-toolbar>
<ion-title>Menu - Standalone</ion-title>
</ion-toolbar>
</ion-header>
</div>
</ion-menu>
<div class="ion-page" main>
<ion-header>
<ion-toolbar>
<ion-title>Menu - Standalone</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<p>
<button class="e2eOpenLeftMenu" onclick="openStart()">Open start menu</button>
<button onclick="openEnd()">Open end menu</button>
</p>
<p>
<button onclick="setPush()">Set Push</button>
<button onclick="setOverlay()">Set Overlay</button>
<button onclick="setReveal()">Set Reveal</button>
<button onclick="setEnabled()">Set Swipe Enabled False</button>
</p>
</ion-content>
</div>
<style>
body {
margin: 0;
}
p > button {
display: block;
clear: both;
width: 100%;
padding: 12px 8px;
font-size: 1em;
background: #f8f8f8;
border: 1px solid #eee;
border-radius: 4px;
margin-bottom: 8px;
}
</style>
<ion-menu-controller></ion-menu-controller>
</body>
</html>