From 0c4687761d1cdaffe0cb7a55f0fec14d65bb8682 Mon Sep 17 00:00:00 2001 From: chenshenhai Date: Sun, 12 Feb 2023 14:44:56 +0800 Subject: [PATCH] test: improve e2e test --- __tests__/e2e.test.ts | 2 +- __tests__/polyfill/image.ts | 3 +- __tests__/polyfill/mock-test.ts | 47 ++++---- __tests__/polyfill/requestanimateframe.ts | 42 +++++--- jest.cover.js | 25 ++--- package.json | 2 +- packages/board/__tests__/data.ts | 14 ++- packages/core/__tests__/data.ts | 11 +- packages/core/__tests__/index.test.ts | 1 + .../core/__tests__/lib/core-element.test.ts | 54 +++++++++- packages/core/__tests__/move.test.ts | 1 + packages/core/src/lib/is.ts | 101 +++++++++++------- packages/util/__tests__/lib/loader.test.ts | 4 +- scripts/screen.config.ts | 6 +- 14 files changed, 194 insertions(+), 119 deletions(-) diff --git a/__tests__/e2e.test.ts b/__tests__/e2e.test.ts index 3fb6379..0028762 100644 --- a/__tests__/e2e.test.ts +++ b/__tests__/e2e.test.ts @@ -32,7 +32,7 @@ async function diff() { await page.setViewport({ width: p.w, height: p.h }); const pageUrl = `http://127.0.0.1:${port}/examples/${p.path || ''}`; await page.goto(pageUrl); - await delay(p.delay || 100); + await delay(p.delay || 200); const buf = await page.screenshot(); const snapshotPicPath = parsePicPath(path.join(snapshotDir, p.path)); diff --git a/__tests__/polyfill/image.ts b/__tests__/polyfill/image.ts index 892b9f2..6ddc865 100644 --- a/__tests__/polyfill/image.ts +++ b/__tests__/polyfill/image.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ // @ts-ignore window.Image = class { constructor() { @@ -9,4 +10,4 @@ window.Image = class { } }, 50); } -} \ No newline at end of file +}; diff --git a/__tests__/polyfill/mock-test.ts b/__tests__/polyfill/mock-test.ts index 90ea09d..081fdf9 100644 --- a/__tests__/polyfill/mock-test.ts +++ b/__tests__/polyfill/mock-test.ts @@ -1,17 +1,17 @@ // https://stackoverflow.com/questions/61593774/how-do-i-test-code-that-uses-requestanimationframe-in-jest -import { requestAnimationFrameMock } from "./requestanimateframe"; +import { requestAnimationFrameMock } from './requestanimateframe'; -describe("mock_requestAnimationFrame", () => { +describe('mock_requestAnimationFrame', () => { beforeEach(() => { requestAnimationFrameMock.reset(); - }) - test("reqest -> trigger", () => { + }); + test('reqest -> trigger', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - requestAnimationFrame(t => order.push(1)); + requestAnimationFrame((t) => order.push(1)); expect(requestAnimationFrameMock.queue.size).toBe(1); expect(order).toEqual([]); @@ -22,13 +22,13 @@ describe("mock_requestAnimationFrame", () => { expect(order).toEqual([1]); }); - test("reqest -> request -> trigger -> trigger", () => { + test('reqest -> request -> trigger -> trigger', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - requestAnimationFrame(t => order.push(1)); - requestAnimationFrame(t => order.push(2)); + requestAnimationFrame((t) => order.push(1)); + requestAnimationFrame((t) => order.push(2)); expect(requestAnimationFrameMock.queue.size).toBe(2); expect(order).toEqual([]); @@ -44,12 +44,12 @@ describe("mock_requestAnimationFrame", () => { expect(order).toEqual([1, 2]); }); - test("reqest -> cancel", () => { + test('reqest -> cancel', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - const handle = requestAnimationFrame(t => order.push(1)); + const handle = requestAnimationFrame((t) => order.push(1)); expect(requestAnimationFrameMock.queue.size).toBe(1); expect(order).toEqual([]); @@ -60,13 +60,13 @@ describe("mock_requestAnimationFrame", () => { expect(order).toEqual([]); }); - test("reqest -> request -> cancel(1) -> trigger", () => { + test('reqest -> request -> cancel(1) -> trigger', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - const handle = requestAnimationFrame(t => order.push(1)); - requestAnimationFrame(t => order.push(2)); + const handle = requestAnimationFrame((t) => order.push(1)); + requestAnimationFrame((t) => order.push(2)); expect(requestAnimationFrameMock.queue.size).toBe(2); expect(order).toEqual([]); @@ -82,13 +82,13 @@ describe("mock_requestAnimationFrame", () => { expect(order).toEqual([2]); }); - test("reqest -> request -> cancel(2) -> trigger", () => { + test('reqest -> request -> cancel(2) -> trigger', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - requestAnimationFrame(t => order.push(1)); - const handle = requestAnimationFrame(t => order.push(2)); + requestAnimationFrame((t) => order.push(1)); + const handle = requestAnimationFrame((t) => order.push(2)); expect(requestAnimationFrameMock.queue.size).toBe(2); expect(order).toEqual([]); @@ -104,21 +104,20 @@ describe("mock_requestAnimationFrame", () => { expect(order).toEqual([1]); }); - test("triggerAllAnimationFrames", () => { + test('triggerAllAnimationFrames', () => { const order: any = []; expect(requestAnimationFrameMock.queue.size).toBe(0); expect(order).toEqual([]); - requestAnimationFrame(t => order.push(1)); - requestAnimationFrame(t => order.push(2)); + requestAnimationFrame((t) => order.push(1)); + requestAnimationFrame((t) => order.push(2)); requestAnimationFrameMock.triggerAllAnimationFrames(); - expect(order).toEqual([1,2]); - + expect(order).toEqual([1, 2]); }); - test("does not fail if triggerNextAnimationFrame() is called with an empty queue.", () => { + test('does not fail if triggerNextAnimationFrame() is called with an empty queue.', () => { requestAnimationFrameMock.triggerNextAnimationFrame(); - }) -}); \ No newline at end of file + }); +}); diff --git a/__tests__/polyfill/requestanimateframe.ts b/__tests__/polyfill/requestanimateframe.ts index b2f847c..5372843 100644 --- a/__tests__/polyfill/requestanimateframe.ts +++ b/__tests__/polyfill/requestanimateframe.ts @@ -1,3 +1,5 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/ban-types */ // https://stackoverflow.com/questions/61593774/how-do-i-test-code-that-uses-requestanimationframe-in-jest // mock_requestAnimationFrame.js @@ -5,33 +7,39 @@ class RequestAnimationFrameMockSession { handleCounter = 0; queue = new Map(); requestAnimationFrame(callback: Function) { - const handle = this.handleCounter++; - this.queue.set(handle, callback); - return handle; + const handle = this.handleCounter++; + this.queue.set(handle, callback); + return handle; } cancelAnimationFrame(handle: Function) { - this.queue.delete(handle); + this.queue.delete(handle); } - triggerNextAnimationFrame(time=performance.now()) { - const nextEntry = this.queue.entries().next().value; - if(nextEntry === undefined) return; + triggerNextAnimationFrame(time = performance.now()) { + const nextEntry = this.queue.entries().next().value; + if (nextEntry === undefined) return; - const [nextHandle, nextCallback] = nextEntry; + const [nextHandle, nextCallback] = nextEntry; - nextCallback(time); - this.queue.delete(nextHandle); + nextCallback(time); + this.queue.delete(nextHandle); } - triggerAllAnimationFrames(time=performance.now()) { - while(this.queue.size > 0) this.triggerNextAnimationFrame(time); + triggerAllAnimationFrames(time = performance.now()) { + while (this.queue.size > 0) this.triggerNextAnimationFrame(time); } reset() { - this.queue.clear(); - this.handleCounter = 0; + this.queue.clear(); + this.handleCounter = 0; } -}; +} export const requestAnimationFrameMock = new RequestAnimationFrameMockSession(); -window.requestAnimationFrame = requestAnimationFrameMock.requestAnimationFrame.bind(requestAnimationFrameMock); +window.requestAnimationFrame = + requestAnimationFrameMock.requestAnimationFrame.bind( + requestAnimationFrameMock + ); // @ts-ignore -window.cancelAnimationFrame = requestAnimationFrameMock.cancelAnimationFrame.bind(requestAnimationFrameMock); \ No newline at end of file +window.cancelAnimationFrame = + requestAnimationFrameMock.cancelAnimationFrame.bind( + requestAnimationFrameMock + ); diff --git a/jest.cover.js b/jest.cover.js index b17725a..6402656 100644 --- a/jest.cover.js +++ b/jest.cover.js @@ -1,21 +1,22 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires const config = require('./jest.config'); module.exports = { ...config, ...{ - "collectCoverage": true, - "coverageReporters": [ - "clover", + collectCoverage: true, + coverageReporters: [ + 'clover', // "html", - "text-summary" + 'text-summary' ], - "coverageThreshold": { - "global": { - "branches": 1, - "functions": 1, - "lines": 1, - "statements": 1 + coverageThreshold: { + global: { + branches: 1, + functions: 1, + lines: 1, + statements: 1 } - }, + } } -} \ No newline at end of file +}; diff --git a/package.json b/package.json index c462e67..80aa4a8 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "jest:update": "jest --update-snapshot --config jest.config.js", "cover": "jest --config jest.cover.js", "beforetest": "lerna bootstrap --no-ci && npm run build", - "test": "npm run e2e && npm run jest", + "test": "npm run jest", "serve": "http-server ./", "lint": "eslint --fix --ext .ts packages/*/src/**", "precommit": "npm run lint", diff --git a/packages/board/__tests__/data.ts b/packages/board/__tests__/data.ts index 7b54332..e2088d0 100644 --- a/packages/board/__tests__/data.ts +++ b/packages/board/__tests__/data.ts @@ -1,5 +1,3 @@ - - export function getData() { const data = { elements: [ @@ -10,7 +8,7 @@ export function getData() { h: 120, type: 'rect', desc: { - color: '#f0f0f0', + color: '#f0f0f0' } }, { @@ -20,7 +18,7 @@ export function getData() { h: 120, type: 'rect', desc: { - color: '#cccccc', + color: '#cccccc' } }, { @@ -30,7 +28,7 @@ export function getData() { h: 120, type: 'rect', desc: { - color: '#c0c0c0', + color: '#c0c0c0' } }, { @@ -40,10 +38,10 @@ export function getData() { h: 100, type: 'rect', desc: { - color: '#e0e0e0', + color: '#e0e0e0' } } ] - } + }; return data; -}; \ No newline at end of file +} diff --git a/packages/core/__tests__/data.ts b/packages/core/__tests__/data.ts index 935bdb7..d3a5adf 100644 --- a/packages/core/__tests__/data.ts +++ b/packages/core/__tests__/data.ts @@ -11,7 +11,7 @@ const data = { bgColor: '#f0f0f0', borderRadius: 20, borderWidth: 10, - borderColor: '#bd0b64', + borderColor: '#bd0b64' } }, { @@ -28,7 +28,7 @@ const data = { color: '#666666', borderRadius: 60, borderWidth: 2, - borderColor: '#bd0b64', + borderColor: '#bd0b64' } }, { @@ -39,7 +39,7 @@ const data = { h: 100, type: 'image', desc: { - src: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOgAAACqCAYAAACnOQMfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nOy9ebylV1Xn/V17P88Z71xzhYTMZDYkAdQAioDyiiAoDbS0/dqtttptD0LLIIIi2ioBbGca7XZ4G7UVpG1FoZHRhCGQkHmokKQqNd95PtOz93r/2Pt5zrlVt5K6t+6tITm/zyepe8895zz7PGevvdb6rQn66KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz76OItwVHVgyfvdZ3odffTRRw9UVaZarddPdTqPzbaz2fl29rY9e/aUz/S6+ujjGY+ZVuuGqVb2uaOtjh9vZX6i43Sy43Smkz3Q8P57zvT6jsV82794upN9ZaLjPjDn/ZYzvZ4++tgULHi/Y7LZ+dB4q9OZ6Did6DidaHk/2XY60fF6tO39eDPzs233141G4+Izvd5l758913Z/Ptlsu4lW5sdb3k+0OpMz7exnnvC+eqbX93SGnOkFPJOgqumsc/8u8/rzImaL96rGiAB4FRVBBEW9qogRAKN+0VhuGTLmFmNM43Su13tfXcz8WzrKW50wgAKY/K8AGOGbieFdw9b+pYjo6VzfMwF9AT0NUFWZzrLv8cj78VxV3PW44fNdHUUVjQ8I4MUAnlR4rIx5cy2Rv91sQVBVWc70tW11t2TKRYoNi1G/YunSI6xW+UpStm8dErl1M9f2TENfQDcZc95fnnl/i3P+VV3tE/4tNrt4utrJh3+jsIrmAuwRVZLE/n3V8JaKMQ9vxnoXvL+209EPZOjLwGDwKArYKJTdhWvUouEhA95pauzHJeHnho3Zsxnre6ahL6CbBO/90Kxz73TO/3s1pgICao57ngBrUYeCx0DTJOY3Roz8qogsbsR6Z1VHXbv9HlX5N86YktEeLSng1YEITpW9E3DeiKVaBtEopBoOFw9Y1ZZY8+E0Me8dEpnciPU9U9EX0A2Gqtp5xw9nLvsvDtlZaBwF5XgBXTOitg3vq/tTI289Ff9PVZMF5/51x/n3Osw2MIh4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`, + src: `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOgAAACqCAYAAACnOQMfAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nOy9ebylV1Xn/V17P88Z71xzhYTMZDYkAdQAioDyiiAoDbS0/dqtttptD0LLIIIi2ioBbGca7XZ4G7UVpG1FoZHRhCGQkHmokKQqNd95PtOz93r/2Pt5zrlVt5K6t+6tITm/zyepe8895zz7PGevvdb6rQn66KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz766KOPPvroo48++uijjz76OItwVHVgyfvdZ3odffTRRw9UVaZarddPdTqPzbaz2fl29rY9e/aUz/S6+ujjGY+ZVuuGqVb2uaOtjh9vZX6i43Sy43Smkz3Q8P57zvT6jsV82794upN9ZaLjPjDn/ZYzvZ4++tgULHi/Y7LZ+dB4q9OZ6Did6DidaHk/2XY60fF6tO39eDPzs233141G4+Izvd5l758913Z/Ptlsu4lW5sdb3k+0OpMz7exnnvC+eqbX93SGnOkFPJOgqumsc/8u8/rzImaL96rGiAB4FRVBBEW9qogRAKN+0VhuGTLmFmNM43Su13tfXcz8WzrKW50wgAKY/K8AGOGbieFdw9b+pYjo6VzfMwF9AT0NUFWZzrLv8cj78VxV3PW44fNdHUUVjQ8I4MUAnlR4rIx5cy2Rv91sQVBVWc70tW11t2TKRYoNi1G/YunSI6xW+UpStm8dErl1M9f2TENfQDcZc95fnnl/i3P+VV3tE/4tNrt4utrJh3+jsIrmAuwRVZLE/n3V8JaKMQ9vxnoXvL+209EPZOjLwGDwKArYKJTdhWvUouEhA95pauzHJeHnho3Zsxnre6ahL6CbBO/90Kxz73TO/3s1pgICao57ngBrUYeCx0DTJOY3Roz8qogsbsR6Z1VHXbv9HlX5N86YktEeLSng1YEITpW9E3DeiKVaBtEopBoOFw9Y1ZZY8+E0Me8dEpnciPU9U9EX0A2Gqtp5xw9nLvsvDtlZaBwF5XgBXTOitg3vq/tTI289Ff9PVZMF5/51x/n3Osw2MIh4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` } }, { @@ -50,13 +50,12 @@ const data = { h: 200, type: 'svg', desc: { - svg: '', + svg: '' } } ] -} +}; export function getData() { return data; } - diff --git a/packages/core/__tests__/index.test.ts b/packages/core/__tests__/index.test.ts index d6183ec..4b70246 100644 --- a/packages/core/__tests__/index.test.ts +++ b/packages/core/__tests__/index.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ import { requestAnimationFrameMock } from './../../../__tests__/polyfill/requestanimateframe'; import './../../../__tests__/polyfill/image'; diff --git a/packages/core/__tests__/lib/core-element.test.ts b/packages/core/__tests__/lib/core-element.test.ts index 1e20175..22b74fa 100644 --- a/packages/core/__tests__/lib/core-element.test.ts +++ b/packages/core/__tests__/lib/core-element.test.ts @@ -1,6 +1,5 @@ // import { TypeData } from '@idraw/types'; import Core from '../../src'; -import { getData } from '../data'; describe('@idraw/core: Element API', () => { document.body.innerHTML = ` @@ -15,7 +14,58 @@ describe('@idraw/core: Element API', () => { }; const mount = document.querySelector('#mount') as HTMLDivElement; const core = new Core(mount, opts); - const data = getData(); + const data = { + elements: [ + { + name: 'rect-001', + x: 10, + y: 10, + w: 200, + h: 100, + type: 'rect', + desc: { + bgColor: '#f0f0f0', + borderRadius: 20, + borderWidth: 10, + borderColor: '#bd0b64' + } + }, + { + name: 'text-002', + x: 80, + y: 80, + w: 200, + h: 120, + // angle: 30, + type: 'text', + desc: { + fontSize: 20, + text: 'Hello Text', + color: '#666666', + borderRadius: 60, + borderWidth: 2, + borderColor: '#bd0b64' + } + }, + { + name: 'text-003', + x: 80, + y: 80, + w: 200, + h: 120, + // angle: 30, + type: 'text', + desc: { + fontSize: 20, + text: 'Hello Text', + color: '#666666', + borderRadius: 60, + borderWidth: 2, + borderColor: '#bd0b64' + } + } + ] + }; core.setData(data); const _data = core.getData(); diff --git a/packages/core/__tests__/move.test.ts b/packages/core/__tests__/move.test.ts index c0ed418..7ae119c 100644 --- a/packages/core/__tests__/move.test.ts +++ b/packages/core/__tests__/move.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ import { requestAnimationFrameMock } from '../../../__tests__/polyfill/requestanimateframe'; import '../../../__tests__/polyfill/image'; diff --git a/packages/core/src/lib/is.ts b/packages/core/src/lib/is.ts index 1774dd0..51dc187 100644 --- a/packages/core/src/lib/is.ts +++ b/packages/core/src/lib/is.ts @@ -1,8 +1,7 @@ -import { isColorStr } from "@idraw/util"; - +import { isColorStr } from '@idraw/util'; function number(value: any) { - return (typeof value === 'number' && (value > 0 || value <= 0)); + return typeof value === 'number' && (value > 0 || value <= 0); } function x(value: any) { @@ -14,15 +13,15 @@ function y(value: any) { } function w(value: any) { - return (typeof value === 'number' && value >= 0); + return typeof value === 'number' && value >= 0; } function h(value: any) { - return (typeof value === 'number' && value >= 0); + return typeof value === 'number' && value >= 0; } function angle(value: any) { - return (typeof value === 'number' && value >= -360 && value <= 360); + return typeof value === 'number' && value >= -360 && value <= 360; } function borderWidth(value: any) { @@ -38,19 +37,26 @@ function color(value: any) { } function imageURL(value: any) { - return (typeof value === 'string' && /^(http:\/\/|https:\/\/|\.\/|\/)/.test(`${value}`)); + return ( + typeof value === 'string' && + /^(http:\/\/|https:\/\/|\.\/|\/)/.test(`${value}`) + ); } function imageBase64(value: any) { - return (typeof value === 'string' && /^(data:image\/)/.test(`${value}`)); + return typeof value === 'string' && /^(data:image\/)/.test(`${value}`); } function imageSrc(value: any) { - return (imageBase64(value) || imageURL(value)); + return imageBase64(value) || imageURL(value); } function svg(value: any) { - return (typeof value === 'string' && /^()/i.test(`${value}`.trim()) && /<\/[\s]{0,}svg>$/i.test(`${value}`.trim())); + return ( + typeof value === 'string' && + /^()/i.test(`${value}`.trim()) && + /<\/[\s]{0,}svg>$/i.test(`${value}`.trim()) + ); } function html(value: any) { @@ -95,40 +101,53 @@ function fontWeight(value: any) { } const is: TypeIs = { - x, y, w, h, angle, number, - borderWidth, borderRadius, color, - imageSrc, imageURL, imageBase64, svg, html, - text, fontSize, lineHeight, textAlign, fontFamily, fontWeight, - strokeWidth, + x, + y, + w, + h, + angle, + number, + borderWidth, + borderRadius, + color, + imageSrc, + imageURL, + imageBase64, + svg, + html, + text, + fontSize, + lineHeight, + textAlign, + fontFamily, + fontWeight, + strokeWidth }; type TypeIs = { - x: (value: any) => boolean, - y: (value: any) => boolean, - w: (value: any) => boolean, - h: (value: any) => boolean, - angle: (value: any) => boolean, - number: (value: any) => boolean, - borderWidth: (value: any) => boolean, - borderRadius: (value: any) => boolean, - color: (value: any) => boolean, - imageSrc: (value: any) => boolean, - imageURL: (value: any) => boolean, - imageBase64: (value: any) => boolean, - svg: (value: any) => boolean, - html: (value: any) => boolean, - text: (value: any) => boolean, - fontSize: (value: any) => boolean, - fontWeight: (value: any) => boolean, - lineHeight: (value: any) => boolean, - textAlign: (value: any) => boolean, - fontFamily: (value: any) => boolean, - strokeWidth: (value: any) => boolean, -} + x: (value: any) => boolean; + y: (value: any) => boolean; + w: (value: any) => boolean; + h: (value: any) => boolean; + angle: (value: any) => boolean; + number: (value: any) => boolean; + borderWidth: (value: any) => boolean; + borderRadius: (value: any) => boolean; + color: (value: any) => boolean; + imageSrc: (value: any) => boolean; + imageURL: (value: any) => boolean; + imageBase64: (value: any) => boolean; + svg: (value: any) => boolean; + html: (value: any) => boolean; + text: (value: any) => boolean; + fontSize: (value: any) => boolean; + fontWeight: (value: any) => boolean; + lineHeight: (value: any) => boolean; + textAlign: (value: any) => boolean; + fontFamily: (value: any) => boolean; + strokeWidth: (value: any) => boolean; +}; export default is; - -export { - TypeIs, -}; \ No newline at end of file +export { TypeIs }; diff --git a/packages/util/__tests__/lib/loader.test.ts b/packages/util/__tests__/lib/loader.test.ts index 631ecab..472ee89 100644 --- a/packages/util/__tests__/lib/loader.test.ts +++ b/packages/util/__tests__/lib/loader.test.ts @@ -1,6 +1,6 @@ -import './../../../../__tests__/polyfill/image'; +import '../../../../__tests__/polyfill/image'; import { loadHTML, loadImage, loadSVG } from '../../src/lib/loader'; -import { parseHTMLToDataURL, parseSVGToDataURL } from './../../src/lib/parser'; +import { parseHTMLToDataURL, parseSVGToDataURL } from '../../src/lib/parser'; describe('@idraw/util: lib/loader', () => { test('loadHTML', async () => { diff --git a/scripts/screen.config.ts b/scripts/screen.config.ts index f06af8c..c41f96f 100644 --- a/scripts/screen.config.ts +++ b/scripts/screen.config.ts @@ -1,12 +1,10 @@ export const pageList = [ { path: 'board/test/main.html', w: 620, h: 270, delay: 500 }, { path: 'board/test/scale.html', w: 930, h: 540, delay: 500 }, - { path: 'board/test/scroll.html', w: 620, h: 270, delay: 500 }, + { path: 'board/test/scroll.html', w: 620, h: 270, delay: 800 }, { path: 'board/test/event.html', w: 620, h: 270, delay: 500 }, { path: 'core/test/elements.html', w: 930, h: 810, delay: 800 }, { path: 'core/test/api.html', w: 930, h: 1570, delay: 800 }, { path: 'core/test/resource.html', w: 930, h: 540, delay: 800 }, - { path: 'idraw/test/api.html', w: 930, h: 540, delay: 800 }, + { path: 'idraw/test/api.html', w: 930, h: 540, delay: 800 } ]; - - \ No newline at end of file