mirror of
https://github.com/tenrok/OverlayScrollbars.git
synced 2026-06-12 21:02:28 +03:00
refine browser testing
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
const PuppeteerEnvironment = require('jest-environment-puppeteer');
|
const PuppeteerEnvironment = require('jest-environment-puppeteer');
|
||||||
const pti = require('puppeteer-to-istanbul');
|
// const pti = require('puppeteer-to-istanbul');
|
||||||
const { setupRollupTest, cleanupRollupTest } = require('./jest-puppeteer.rollup.js');
|
const { setupRollupTest, cleanupRollupTest } = require('./jest-puppeteer.rollup.js');
|
||||||
|
|
||||||
class PuppeteerRollupEnvironment extends PuppeteerEnvironment {
|
class PuppeteerRollupEnvironment extends PuppeteerEnvironment {
|
||||||
@@ -22,9 +22,9 @@ class PuppeteerRollupEnvironment extends PuppeteerEnvironment {
|
|||||||
|
|
||||||
async teardown() {
|
async teardown() {
|
||||||
// coverage
|
// coverage
|
||||||
const { page } = this.global;
|
// const { page } = this.global;
|
||||||
const [jsCoverage, cssCoverage] = await Promise.all([page.coverage.stopJSCoverage(), page.coverage.stopCSSCoverage()]);
|
// const [jsCoverage, cssCoverage] = await Promise.all([page.coverage.stopJSCoverage(), page.coverage.stopCSSCoverage()]);
|
||||||
pti.write([...jsCoverage, ...cssCoverage], { includeHostname: true, storagePath: './.pptr' });
|
// pti.write([...jsCoverage, ...cssCoverage], { includeHostname: true, storagePath: './.pptr' });
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
cleanupRollupTest(this.ctx.testPath, this.cfg.cache);
|
cleanupRollupTest(this.ctx.testPath, this.cfg.cache);
|
||||||
|
|||||||
@@ -87,20 +87,6 @@ const genHtmlTemplateFunc = (content) => ({ attributes, files, meta, publicPath,
|
|||||||
${content || ''}
|
${content || ''}
|
||||||
${scripts}
|
${scripts}
|
||||||
<div id="testResult"></div>
|
<div id="testResult"></div>
|
||||||
<script>
|
|
||||||
var testResultElm = document.getElementById('testResult');
|
|
||||||
window.setTestResult = function(result) {
|
|
||||||
if (typeof result === 'boolean') {
|
|
||||||
testResultElm.setAttribute('class', result ? 'passed' : 'failed');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
testResultElm.removeAttribute('class');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
window.testPassed = function() {
|
|
||||||
return testResultElm.getAttribute('class') === 'passed';
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
</body>
|
||||||
</html>`;
|
</html>`;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,6 +15,6 @@ module.exports = {
|
|||||||
server: {
|
server: {
|
||||||
command: `cross-env TEST_SERVER_PORT=${port} node ${testServerPath}`,
|
command: `cross-env TEST_SERVER_PORT=${port} node ${testServerPath}`,
|
||||||
port,
|
port,
|
||||||
launchTimeout: 4000,
|
launchTimeout: 10000,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import 'overlayscrollbars.scss';
|
import 'overlayscrollbars.scss';
|
||||||
import { Environment } from 'environment';
|
import { Environment } from 'environment';
|
||||||
|
|
||||||
window.envInstance = new Environment();
|
const envInstance = new Environment();
|
||||||
document.body.textContent = JSON.stringify(window.envInstance);
|
document.body.textContent = JSON.stringify(envInstance);
|
||||||
|
|
||||||
export { Environment };
|
export { envInstance };
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ describe('Environment', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should be titled "Environment"', async () => {
|
it('should be titled "Environment"', async () => {
|
||||||
const a: Environment = await page.evaluate(() => window.envInstance);
|
// @ts-ignore
|
||||||
|
const a: Environment = await page.evaluate(() => window.Environment.envInstance);
|
||||||
console.log(a);
|
console.log(a);
|
||||||
await expect(page.title()).resolves.toMatch('Environment');
|
await expect(page.title()).resolves.toMatch('Environment');
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import './index.scss';
|
|||||||
import should from 'should';
|
import should from 'should';
|
||||||
import { waitFor } from '@testing-library/dom';
|
import { waitFor } from '@testing-library/dom';
|
||||||
import { generateSelectCallback, iterateSelect } from '@/testing-browser/Select';
|
import { generateSelectCallback, iterateSelect } from '@/testing-browser/Select';
|
||||||
|
import { setTestResult } from '@/testing-browser/TestResult';
|
||||||
import { hasDimensions, offsetSize, WH } from 'support';
|
import { hasDimensions, offsetSize, WH } from 'support';
|
||||||
|
|
||||||
import { createSizeObserver } from 'overlayscrollbars/observers/createSizeObserver';
|
import { createSizeObserver } from 'overlayscrollbars/observers/createSizeObserver';
|
||||||
@@ -48,7 +49,7 @@ const iterate = async (select: HTMLSelectElement | null, afterEach?: () => any)
|
|||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
await waitFor(() => should.equal(iterations, currIterations + 1), {
|
await waitFor(() => should.equal(iterations, currIterations + 1), {
|
||||||
onTimeout(error): Error {
|
onTimeout(error): Error {
|
||||||
window.setTestResult(false);
|
setTestResult(false);
|
||||||
return error;
|
return error;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@@ -65,24 +66,12 @@ borderSelect?.addEventListener('change', selectCallback);
|
|||||||
boxSizingSelect?.addEventListener('change', selectCallback);
|
boxSizingSelect?.addEventListener('change', selectCallback);
|
||||||
displaySelect?.addEventListener('change', selectCallback);
|
displaySelect?.addEventListener('change', selectCallback);
|
||||||
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
selectCallback(heightSelect);
|
||||||
// @ts-ignore
|
selectCallback(widthSelect);
|
||||||
selectCallback({ target: heightSelect });
|
selectCallback(paddingSelect);
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
selectCallback(borderSelect);
|
||||||
// @ts-ignore
|
selectCallback(boxSizingSelect);
|
||||||
selectCallback({ target: widthSelect });
|
selectCallback(displaySelect);
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
selectCallback({ target: paddingSelect });
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
selectCallback({ target: borderSelect });
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
selectCallback({ target: boxSizingSelect });
|
|
||||||
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
||||||
// @ts-ignore
|
|
||||||
selectCallback({ target: displaySelect });
|
|
||||||
|
|
||||||
const iteratePadding = async (afterEach?: () => any) => {
|
const iteratePadding = async (afterEach?: () => any) => {
|
||||||
await iterate(paddingSelect, afterEach);
|
await iterate(paddingSelect, afterEach);
|
||||||
@@ -104,7 +93,8 @@ const iterateDisplay = async (afterEach?: () => any) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const start = async () => {
|
const start = async () => {
|
||||||
window.setTestResult(null);
|
setTestResult(null);
|
||||||
|
|
||||||
targetElm?.removeAttribute('style');
|
targetElm?.removeAttribute('style');
|
||||||
await iterateDisplay();
|
await iterateDisplay();
|
||||||
await iterateBoxSizing(async () => {
|
await iterateBoxSizing(async () => {
|
||||||
@@ -116,7 +106,8 @@ const start = async () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
window.setTestResult(true);
|
|
||||||
|
setTestResult(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
startBtn?.addEventListener('click', start);
|
startBtn?.addEventListener('click', start);
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"baseUrl": "./src/",
|
"baseUrl": "./src/",
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/testing-browser/*": ["../../testing-browser/src/*"]
|
"@/testing-browser*": ["../../testing-browser/src/*"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,24 @@
|
|||||||
|
function isEvent(obj: any): obj is Event {
|
||||||
|
return obj instanceof Event || !!obj.target;
|
||||||
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line
|
// eslint-disable-next-line
|
||||||
const noop = <T>(): T => {
|
const noop = <T>(): T => {
|
||||||
return {} as T;
|
return {} as T;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getSelectOptions = (selectElement: HTMLSelectElement) => Array.from(selectElement.options).map((option) => option.value);
|
const getSelectOptions = (selectElement: HTMLSelectElement) => Array.from(selectElement.options).map((option) => option.value);
|
||||||
|
|
||||||
export const generateSelectCallback = (targetElm: HTMLElement | null) => (event: Event) => {
|
export const generateSelectCallback = (targetElm: HTMLElement | null) => (event: Event | HTMLSelectElement | null) => {
|
||||||
const target = event.target as HTMLSelectElement;
|
const target: HTMLSelectElement | null = isEvent(event) ? (event.target as HTMLSelectElement) : event;
|
||||||
const selectedOption = target.value;
|
if (target) {
|
||||||
const selectOptions = getSelectOptions(target);
|
const selectedOption = target.value;
|
||||||
|
const selectOptions = getSelectOptions(target);
|
||||||
|
|
||||||
if (targetElm) {
|
if (targetElm) {
|
||||||
targetElm.classList.remove(...selectOptions);
|
targetElm.classList.remove(...selectOptions);
|
||||||
targetElm.classList.add(selectedOption);
|
targetElm.classList.add(selectedOption);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
const getTestResultElm = () => document.getElementById('testResult');
|
||||||
|
|
||||||
|
export const setTestResult = (result: boolean | null) => {
|
||||||
|
const elm = getTestResultElm();
|
||||||
|
if (elm) {
|
||||||
|
if (typeof result === 'boolean') {
|
||||||
|
elm.setAttribute('class', result ? 'passed' : 'failed');
|
||||||
|
} else {
|
||||||
|
elm.removeAttribute('class');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const testPassed = (): boolean => {
|
||||||
|
const elm = getTestResultElm();
|
||||||
|
return elm ? elm.getAttribute('class') === 'passed' : false;
|
||||||
|
};
|
||||||
@@ -254,8 +254,14 @@ const rollupConfig = (config = {}, { project = process.cwd(), overwrite = {}, si
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (isLast) {
|
if (isLast) {
|
||||||
build.plugins.unshift({
|
build.plugins.push({
|
||||||
name: 'deleteCacheDirs',
|
name: 'deleteCacheDirs',
|
||||||
|
moduleParsed(moduleInfo) {
|
||||||
|
//if (filename.includes('index.browser')) {
|
||||||
|
console.log('moduleInfo', moduleInfo);
|
||||||
|
//console.log('importer', filename);
|
||||||
|
//}
|
||||||
|
},
|
||||||
writeBundle() {
|
writeBundle() {
|
||||||
const cacheDirs = cache.map((dir) => path.resolve(projectPath, dir));
|
const cacheDirs = cache.map((dir) => path.resolve(projectPath, dir));
|
||||||
const deletedDirs = del.sync(cacheDirs);
|
const deletedDirs = del.sync(cacheDirs);
|
||||||
|
|||||||
Reference in New Issue
Block a user