forked from storybookjs/storybook
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhelper.ts
56 lines (45 loc) · 1.64 KB
/
helper.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/* eslint-disable no-unused-expressions */
/* eslint-disable jest/valid-expect */
type StorybookApps = 'official-storybook';
type Addons = 'Actions' | 'Knobs';
const getUrl = (route: string) => {
const host = Cypress.env('location') || 'http://localhost:8001';
return `${host}/${route}`;
};
export const visit = (route = '') => {
return cy
.clearLocalStorage()
.visit(getUrl(route))
.get(`#storybook-preview-iframe`)
.then({ timeout: 15000 }, (iframe) => {
return cy.wrap(iframe, { timeout: 10000 }).should(() => {
const content: Document | null = (iframe[0] as HTMLIFrameElement).contentDocument;
const element: HTMLElement | null = content !== null ? content.documentElement : null;
expect(element).not.null;
if (element !== null) {
expect(element.querySelector('#root > *')).not.null;
}
});
});
};
export const clickAddon = (addonName: Addons) => {
return cy.get(`[role=tablist] button[role=tab]`).contains(addonName).click();
};
export const getStorybookPreview = () => {
return cy.get(`#storybook-preview-iframe`).then({ timeout: 10000 }, (iframe) => {
const content: Document | null = (iframe[0] as HTMLIFrameElement).contentDocument;
const element: HTMLElement | null = content !== null ? content.documentElement : null;
console.log({ element, content, iframe });
return cy
.wrap(iframe)
.should(() => {
expect(element).not.null;
if (element !== null) {
expect(element.querySelector('#root > *')).not.null;
}
})
.then(() => {
return cy.wrap(element).get('#root');
});
});
};