creevey 0.10.0-beta.1 → 0.10.0-beta.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/addon/components/Panel.js +2 -2
- package/dist/client/addon/components/Panel.js.map +1 -1
- package/dist/client/addon/controller.js +4 -5
- package/dist/client/addon/controller.js.map +1 -1
- package/dist/client/addon/withCreevey.js +18 -34
- package/dist/client/addon/withCreevey.js.map +1 -1
- package/dist/client/shared/components/ImagesView/SwapView.js +12 -0
- package/dist/client/shared/components/ImagesView/SwapView.js.map +1 -1
- package/dist/client/shared/components/PageHeader/ImagePreview.js +1 -0
- package/dist/client/shared/components/PageHeader/ImagePreview.js.map +1 -1
- package/dist/client/shared/components/ResultsPage.js +23 -5
- package/dist/client/shared/components/ResultsPage.js.map +1 -1
- package/dist/client/web/CreeveyApp.js +22 -6
- package/dist/client/web/CreeveyApp.js.map +1 -1
- package/dist/client/web/CreeveyContext.d.ts +5 -0
- package/dist/client/web/CreeveyContext.js +3 -0
- package/dist/client/web/CreeveyContext.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/Search.js +2 -2
- package/dist/client/web/CreeveyView/SideBar/Search.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBar.js +1 -0
- package/dist/client/web/CreeveyView/SideBar/SideBar.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js +49 -6
- package/dist/client/web/CreeveyView/SideBar/SideBarFooter.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js +1 -3
- package/dist/client/web/CreeveyView/SideBar/SuiteLink.js.map +1 -1
- package/dist/client/web/CreeveyView/SideBar/TestLink.js +1 -3
- package/dist/client/web/CreeveyView/SideBar/TestLink.js.map +1 -1
- package/dist/client/web/KeyboardEventsContext.d.ts +1 -8
- package/dist/client/web/KeyboardEventsContext.js +62 -57
- package/dist/client/web/KeyboardEventsContext.js.map +1 -1
- package/dist/client/web/assets/{index-DkmZfG9C.js → index-BE9CL5_G.js} +94 -94
- package/dist/client/web/index.html +1 -1
- package/dist/creevey.js +13 -5
- package/dist/creevey.js.map +1 -1
- package/dist/server/config.js +4 -3
- package/dist/server/config.js.map +1 -1
- package/dist/server/docker.js +2 -2
- package/dist/server/docker.js.map +1 -1
- package/dist/server/index.js +29 -3
- package/dist/server/index.js.map +1 -1
- package/dist/server/logger.d.ts +2 -1
- package/dist/server/logger.js +7 -3
- package/dist/server/logger.js.map +1 -1
- package/dist/server/master/api.js +1 -1
- package/dist/server/master/api.js.map +1 -1
- package/dist/server/master/pool.d.ts +3 -3
- package/dist/server/master/pool.js +10 -63
- package/dist/server/master/pool.js.map +1 -1
- package/dist/server/master/queue.d.ts +13 -0
- package/dist/server/master/queue.js +64 -0
- package/dist/server/master/queue.js.map +1 -0
- package/dist/server/master/runner.d.ts +1 -0
- package/dist/server/master/runner.js +4 -1
- package/dist/server/master/runner.js.map +1 -1
- package/dist/server/master/server.js +1 -1
- package/dist/server/master/server.js.map +1 -1
- package/dist/server/master/start.js +4 -4
- package/dist/server/master/start.js.map +1 -1
- package/dist/server/playwright/docker-file.js +12 -2
- package/dist/server/playwright/docker-file.js.map +1 -1
- package/dist/server/playwright/internal.d.ts +2 -2
- package/dist/server/playwright/internal.js +56 -44
- package/dist/server/playwright/internal.js.map +1 -1
- package/dist/server/playwright/webdriver.js +1 -1
- package/dist/server/playwright/webdriver.js.map +1 -1
- package/dist/server/providers/browser.js +2 -1
- package/dist/server/providers/browser.js.map +1 -1
- package/dist/server/providers/hybrid.js +1 -1
- package/dist/server/providers/hybrid.js.map +1 -1
- package/dist/server/reporter.js +8 -4
- package/dist/server/reporter.js.map +1 -1
- package/dist/server/selenium/internal.d.ts +2 -3
- package/dist/server/selenium/internal.js +116 -90
- package/dist/server/selenium/internal.js.map +1 -1
- package/dist/server/selenium/selenoid.js +2 -2
- package/dist/server/selenium/selenoid.js.map +1 -1
- package/dist/server/selenium/webdriver.js +1 -1
- package/dist/server/selenium/webdriver.js.map +1 -1
- package/dist/server/telemetry.js +7 -3
- package/dist/server/telemetry.js.map +1 -1
- package/dist/server/utils.d.ts +2 -1
- package/dist/server/utils.js +13 -3
- package/dist/server/utils.js.map +1 -1
- package/dist/server/webdriver.d.ts +2 -3
- package/dist/server/webdriver.js +10 -9
- package/dist/server/webdriver.js.map +1 -1
- package/dist/server/worker/chai-image.d.ts +1 -2
- package/dist/server/worker/chai-image.js +4 -3
- package/dist/server/worker/chai-image.js.map +1 -1
- package/dist/server/worker/start.js +24 -14
- package/dist/server/worker/start.js.map +1 -1
- package/dist/types.d.ts +30 -11
- package/dist/types.js +13 -1
- package/dist/types.js.map +1 -1
- package/package.json +36 -42
- package/src/client/addon/components/Panel.tsx +2 -2
- package/src/client/addon/controller.ts +13 -6
- package/src/client/addon/withCreevey.ts +25 -13
- package/src/client/shared/components/ImagesView/SwapView.tsx +18 -0
- package/src/client/shared/components/PageHeader/ImagePreview.tsx +1 -0
- package/src/client/shared/components/ResultsPage.tsx +28 -7
- package/src/client/web/CreeveyApp.tsx +25 -7
- package/src/client/web/CreeveyContext.tsx +9 -0
- package/src/client/web/CreeveyView/SideBar/Search.tsx +3 -3
- package/src/client/web/CreeveyView/SideBar/SideBar.tsx +1 -0
- package/src/client/web/CreeveyView/SideBar/SideBarFooter.tsx +37 -6
- package/src/client/web/CreeveyView/SideBar/SuiteLink.tsx +3 -5
- package/src/client/web/CreeveyView/SideBar/TestLink.tsx +2 -4
- package/src/client/web/KeyboardEventsContext.tsx +61 -73
- package/src/creevey.ts +13 -6
- package/src/server/config.ts +4 -3
- package/src/server/docker.ts +2 -2
- package/src/server/index.ts +27 -4
- package/src/server/logger.ts +6 -2
- package/src/server/master/api.ts +1 -1
- package/src/server/master/pool.ts +18 -56
- package/src/server/master/queue.ts +64 -0
- package/src/server/master/runner.ts +4 -1
- package/src/server/master/server.ts +1 -1
- package/src/server/master/start.ts +7 -4
- package/src/server/playwright/docker-file.ts +14 -2
- package/src/server/playwright/internal.ts +76 -49
- package/src/server/playwright/webdriver.ts +1 -1
- package/src/server/providers/browser.ts +2 -1
- package/src/server/providers/hybrid.ts +1 -1
- package/src/server/reporter.ts +9 -3
- package/src/server/selenium/internal.ts +119 -92
- package/src/server/selenium/selenoid.ts +2 -2
- package/src/server/selenium/webdriver.ts +1 -1
- package/src/server/telemetry.ts +7 -3
- package/src/server/utils.ts +14 -4
- package/src/server/webdriver.ts +10 -15
- package/src/server/worker/chai-image.ts +4 -4
- package/src/server/worker/start.ts +25 -16
- package/src/types.ts +32 -13
- package/.yarnrc.yml +0 -1
- package/chromatic.config.json +0 -5
@@ -1,6 +1,4 @@
|
|
1
1
|
import chai from 'chai';
|
2
|
-
import chalk from 'chalk';
|
3
|
-
import Logger from 'loglevel';
|
4
2
|
import EventEmitter from 'events';
|
5
3
|
import {
|
6
4
|
BaseCreeveyTestContext,
|
@@ -86,7 +84,7 @@ function runHandler(browserName: string, images: Partial<Record<string, Images>>
|
|
86
84
|
|
87
85
|
async function setupWebdriver(webdriver: CreeveyWebdriver): Promise<[string, CreeveyWebdriver] | undefined> {
|
88
86
|
if ((await webdriver.openBrowser(true)) == null) {
|
89
|
-
logger.error('Failed to start browser');
|
87
|
+
logger().error('Failed to start browser');
|
90
88
|
emitWorkerMessage({
|
91
89
|
type: 'error',
|
92
90
|
payload: { subtype: 'browser', error: 'Failed to start browser' },
|
@@ -125,8 +123,6 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
125
123
|
|
126
124
|
if (!webdriver || !sessionId) return;
|
127
125
|
|
128
|
-
const workerLogger = Logger.getLogger(`${browser}:${chalk.gray(sessionId)}`);
|
129
|
-
|
130
126
|
const reporterOptions = {
|
131
127
|
...config.reporterOptions,
|
132
128
|
creevey: {
|
@@ -150,13 +146,13 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
150
146
|
const { matchImage, matchImages } = options.odiff
|
151
147
|
? getOdiffMatchers(imagesContext, config)
|
152
148
|
: await getMatchers(imagesContext, config);
|
153
|
-
chai.use(chaiImage(matchImage, matchImages
|
149
|
+
chai.use(chaiImage(matchImage, matchImages));
|
154
150
|
|
155
151
|
const tests = await (async () => {
|
156
152
|
try {
|
157
153
|
return await getTestsFromStories(config, browser, webdriver);
|
158
154
|
} catch (error) {
|
159
|
-
|
155
|
+
logger().error('Failed to get tests from stories:', error);
|
160
156
|
emitWorkerMessage({
|
161
157
|
type: 'error',
|
162
158
|
payload: { subtype: 'browser', error: serializeError(error) },
|
@@ -174,7 +170,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
174
170
|
|
175
171
|
if (!test) {
|
176
172
|
const error = `Test with id ${message.payload.id} not found`;
|
177
|
-
|
173
|
+
logger().error(error);
|
178
174
|
emitWorkerMessage({
|
179
175
|
type: 'error',
|
180
176
|
payload: { subtype: 'test', error },
|
@@ -226,16 +222,20 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
226
222
|
runner.emit(TEST_EVENTS.RUN_BEGIN);
|
227
223
|
runner.emit(TEST_EVENTS.TEST_BEGIN, fakeTest);
|
228
224
|
|
225
|
+
let timeout;
|
226
|
+
let isRejected = false;
|
229
227
|
const start = Date.now();
|
230
228
|
try {
|
231
229
|
await Promise.race([
|
232
|
-
new Promise(
|
233
|
-
|
234
|
-
|
235
|
-
|
230
|
+
new Promise(
|
231
|
+
(_, reject) =>
|
232
|
+
(timeout = setTimeout(() => {
|
233
|
+
isRejected = true;
|
234
|
+
reject(new Error(`Timeout of ${config.testTimeout}ms exceeded`));
|
235
|
+
}, config.testTimeout)),
|
236
236
|
),
|
237
237
|
(async () => {
|
238
|
-
const context = await webdriver.switchStory(test.story, baseContext
|
238
|
+
const context = await webdriver.switchStory(test.story, baseContext);
|
239
239
|
await test.fn(context);
|
240
240
|
})(),
|
241
241
|
]);
|
@@ -244,6 +244,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
244
244
|
fakeTest.err = error;
|
245
245
|
}
|
246
246
|
const duration = Date.now() - start;
|
247
|
+
clearTimeout(timeout);
|
247
248
|
fakeTest.attachments = imagesContext.attachments;
|
248
249
|
fakeTest.state = error ? 'failed' : 'passed';
|
249
250
|
fakeTest.duration = duration;
|
@@ -259,9 +260,17 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
259
260
|
|
260
261
|
await webdriver.afterTest(test);
|
261
262
|
|
262
|
-
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
264
|
+
if (isRejected) {
|
265
|
+
emitWorkerMessage({
|
266
|
+
type: 'error',
|
267
|
+
payload: { subtype: 'unknown', error: serializeError(error) },
|
268
|
+
});
|
269
|
+
} else {
|
270
|
+
runHandler(baseContext.browserName, imagesContext.images, error);
|
271
|
+
}
|
263
272
|
})().catch((error: unknown) => {
|
264
|
-
|
273
|
+
logger().error('Unexpected error:', error);
|
265
274
|
emitWorkerMessage({
|
266
275
|
type: 'error',
|
267
276
|
payload: { subtype: 'test', error: serializeError(error) },
|
@@ -269,7 +278,7 @@ export async function start(browser: string, gridUrl: string, config: Config, op
|
|
269
278
|
});
|
270
279
|
});
|
271
280
|
|
272
|
-
|
281
|
+
logger().info('Browser is ready');
|
273
282
|
|
274
283
|
emitWorkerMessage({ type: 'ready' });
|
275
284
|
}
|
package/src/types.ts
CHANGED
@@ -4,7 +4,7 @@ import type Pixelmatch from 'pixelmatch';
|
|
4
4
|
import type { ODiffOptions } from 'odiff-bin';
|
5
5
|
import type { expect } from 'chai';
|
6
6
|
import type EventEmitter from 'events';
|
7
|
-
import
|
7
|
+
import { LaunchOptions } from 'playwright-core';
|
8
8
|
// import type { Browser } from 'playwright-core';
|
9
9
|
|
10
10
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
@@ -41,6 +41,18 @@ export interface StoryMeta {
|
|
41
41
|
};
|
42
42
|
}
|
43
43
|
|
44
|
+
export enum StorybookEvents {
|
45
|
+
SET_STORIES = 'setStories',
|
46
|
+
SET_CURRENT_STORY = 'setCurrentStory',
|
47
|
+
FORCE_REMOUNT = 'forceRemount',
|
48
|
+
STORY_RENDERED = 'storyRendered',
|
49
|
+
STORY_ERRORED = 'storyErrored',
|
50
|
+
STORY_THREW_EXCEPTION = 'storyThrewException',
|
51
|
+
UPDATE_STORY_ARGS = 'updateStoryArgs',
|
52
|
+
SET_GLOBALS = 'setGlobals',
|
53
|
+
UPDATE_GLOBALS = 'updateGlobals',
|
54
|
+
}
|
55
|
+
|
44
56
|
export interface CreeveyMeta {
|
45
57
|
parameters?: {
|
46
58
|
creevey?: CreeveyStoryParams;
|
@@ -91,14 +103,6 @@ export class ChromeConfig {
|
|
91
103
|
*/
|
92
104
|
export interface BrowserConfigObject {
|
93
105
|
browserName: string;
|
94
|
-
/**
|
95
|
-
* Browser version. Ignored with Playwright webdriver
|
96
|
-
*/
|
97
|
-
browserVersion?: string;
|
98
|
-
/**
|
99
|
-
* Operation system name. Ignored with Playwright webdriver
|
100
|
-
*/
|
101
|
-
platformName?: string;
|
102
106
|
// customizeBuilder?: (builder: Builder) => Builder;
|
103
107
|
limit?: number;
|
104
108
|
/**
|
@@ -122,15 +126,25 @@ export interface BrowserConfigObject {
|
|
122
126
|
* Used only with `useDocker == false`
|
123
127
|
*/
|
124
128
|
webdriverCommand?: string[];
|
125
|
-
// TODO Check version compatibility
|
126
|
-
// playwrightVersion?: string;
|
127
129
|
// /**
|
128
130
|
// * Use to start standalone playwright browser
|
129
131
|
// */
|
130
132
|
// playwrightBrowser?: () => Promise<Browser>;
|
131
133
|
viewport?: { width: number; height: number };
|
132
134
|
|
133
|
-
|
135
|
+
seleniumCapabilities?: {
|
136
|
+
/**
|
137
|
+
* Browser version. Ignored with Playwright webdriver
|
138
|
+
*/
|
139
|
+
browserVersion?: string;
|
140
|
+
/**
|
141
|
+
* Operation system name. Ignored with Playwright webdriver
|
142
|
+
*/
|
143
|
+
platformName?: string;
|
144
|
+
[name: string]: unknown;
|
145
|
+
};
|
146
|
+
|
147
|
+
playwrightOptions?: Omit<LaunchOptions, 'logger'>;
|
134
148
|
}
|
135
149
|
|
136
150
|
export type StorybookGlobals = Record<string, unknown>;
|
@@ -149,7 +163,7 @@ export interface CreeveyWebdriver {
|
|
149
163
|
openBrowser(fresh?: boolean): Promise<CreeveyWebdriver | null>;
|
150
164
|
closeBrowser(): Promise<void>;
|
151
165
|
loadStoriesFromBrowser(): Promise<StoriesRaw>;
|
152
|
-
switchStory(story: StoryInput, context: BaseCreeveyTestContext
|
166
|
+
switchStory(story: StoryInput, context: BaseCreeveyTestContext): Promise<CreeveyTestContext>;
|
153
167
|
afterTest(test: ServerTest): Promise<void>;
|
154
168
|
}
|
155
169
|
|
@@ -292,6 +306,11 @@ export interface Config {
|
|
292
306
|
* The `--ui` CLI option ignores this option
|
293
307
|
*/
|
294
308
|
failFast: boolean;
|
309
|
+
/**
|
310
|
+
* Start workers in sequential queue
|
311
|
+
* @default false
|
312
|
+
*/
|
313
|
+
useWorkerQueue: boolean;
|
295
314
|
/**
|
296
315
|
* Specify platform for docker images
|
297
316
|
*/
|
package/.yarnrc.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
nodeLinker: node-modules
|