Skip to content

Commit ccf0383

Browse files
committed
test: improved storybook
1 parent 8cb43c9 commit ccf0383

File tree

6 files changed

+77
-24
lines changed

6 files changed

+77
-24
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ lerna-debug.log*
5656
# misc
5757
/.sass-cache
5858
/connect.lock
59-
/coverage
59+
coverage
6060
/libpeerconnection.log
6161
testem.log
6262
/typings

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"@nx/vite": "16.0.3",
3535
"@nx/workspace": "16.0.3",
3636
"@storybook/addon-a11y": "7.0.8",
37+
"@storybook/addon-coverage": "0.0.8",
3738
"@storybook/addon-essentials": "7.0.8",
3839
"@storybook/addon-interactions": "7.0.8",
3940
"@storybook/addon-links": "7.0.8",

packages/kit-headless/project.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@
9797
"test-storybook": {
9898
"executor": "nx:run-commands",
9999
"options": {
100-
"command": "pnpm test-storybook --url http://localhost:4400",
101-
"cwd": "packages/headless"
100+
"command": "pnpm test-storybook --url http://localhost:4400 --coverage",
101+
"cwd": "packages/kit-headless"
102102
}
103103
},
104104
"component-test": {

packages/kit-headless/src/components/tabs/tab.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ export const Tab = component$((props: TabProps) => {
3636
);
3737
});
3838

39+
const matchedTabPanelId = useComputed$(
40+
() => contextService.tabsMap[uniqueId]?.tabPanelId
41+
);
42+
3943
// TODO: Figure out a way to fix this shitty hack :)
4044
useTask$(({ track }) => {
4145
track(() => isSelectedSignal.value);
@@ -66,7 +70,7 @@ export const Tab = component$((props: TabProps) => {
6670
onMouseEnter$={selectIfAutomatic$}
6771
aria-selected={isSelectedSignal.value}
6872
tabIndex={isSelectedSignal.value ? 0 : -1}
69-
aria-controls={'tabpanel-' + contextService.tabsMap[uniqueId]?.tabPanelId}
73+
aria-controls={'tabpanel-' + matchedTabPanelId.value}
7074
class={`${
7175
isSelectedSignal.value ? `selected ${props.selectedClassName}` : ''
7276
}${props.class ? ` ${props.class}` : ''}`}
Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,52 @@
11
import { Meta, StoryObj } from 'storybook-framework-qwik';
22
import { Tab, TabList, TabPanel, Tabs, TabsProps } from './';
3-
import { userEvent, within } from '@storybook/testing-library';
3+
import { userEvent, within, screen } from '@storybook/testing-library';
44
import { expect } from '@storybook/jest';
55

66
const meta: Meta<TabsProps> = {
77
component: Tabs,
8+
args: {
9+
behavior: 'automatic',
10+
},
11+
argTypes: {
12+
behavior: {
13+
control: {
14+
type: 'select',
15+
},
16+
options: ['automatic', 'manual'],
17+
},
18+
},
819
};
920

1021
export default meta;
1122

1223
type Story = StoryObj<TabsProps>;
1324

25+
const createThreeTabs = () => (
26+
<Tabs>
27+
<TabList>
28+
<Tab>Tab 1</Tab>
29+
<Tab>Tab 2</Tab>
30+
<Tab>Tab 3</Tab>
31+
</TabList>
32+
33+
<TabPanel>Panel 1</TabPanel>
34+
<TabPanel>Panel 2</TabPanel>
35+
<TabPanel>Panel 3</TabPanel>
36+
</Tabs>
37+
);
38+
1439
export const Primary: Story = {
15-
render: () => (
16-
<Tabs>
17-
<TabList>
18-
<Tab>Tab 1</Tab>
19-
<Tab>Tab 2</Tab>
20-
<Tab>Tab 3</Tab>
21-
</TabList>
22-
23-
<TabPanel>Panel 1</TabPanel>
24-
<TabPanel>Panel 2</TabPanel>
25-
<TabPanel>Panel 3</TabPanel>
26-
</Tabs>
27-
),
40+
render: () => createThreeTabs(),
2841
play: async ({ canvasElement }) => {
2942
const canvas = within(canvasElement);
3043

31-
const tabs = await canvas.findAllByRole('tab');
32-
await userEvent.click(tabs[1]);
44+
const secondTab = await canvas.findByRole('tab', { name: /Tab 2/i });
45+
screen.debug(canvasElement);
46+
await userEvent.click(secondTab);
3347

34-
const tabPanel = await canvas.findByRole('tabpanel');
48+
const activeTabPanel = await canvas.findByRole('tabpanel');
3549

36-
await expect(tabPanel).toHaveTextContent('Panel 2');
50+
await expect(activeTabPanel).toHaveTextContent('Panel 2');
3751
},
3852
};

pnpm-lock.yaml

Lines changed: 36 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)