Skip to content

Commit b5edbfc

Browse files
authored
Merge pull request #259 from qwikifiers/pr-add-cypress-tests
2 parents 4db0e75 + 06227d3 commit b5edbfc

File tree

8 files changed

+195
-341
lines changed

8 files changed

+195
-341
lines changed

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010
"scripts": {
1111
"commit": "git-cz",
1212
"format:fix": "pretty-quick --staged",
13-
"prepare": "husky install"
13+
"prepare": "husky install",
14+
"test:headless": "nx component-test headless --watch"
1415
},
1516
"devDependencies": {
1617
"@builder.io/qwik": "0.23.0",
@@ -78,7 +79,7 @@
7879
"ts-node": "10.9.1",
7980
"typescript": "5.0.2",
8081
"undici": "5.21.0",
81-
"vite": "4.2.1",
82+
"vite": "4.1.2",
8283
"vite-plugin-dts": "~1.7.3",
8384
"vite-plugin-eslint": "^1.8.1",
8485
"vite-tsconfig-paths": "4.0.7",

packages/headless/cypress.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ import viteConfig from './vite.config';
44

55
const cypressConfig = {
66
component: {
7+
specPattern: '**/*.spec.{js,jsx,ts,tsx}',
78
devServer: {
89
bundler: 'vite',
9-
viteConfig: mergeConfig(viteConfig, { mode: 'test' }),
10+
viteConfig,
1011
},
1112
},
1213
};

packages/headless/cypress/support/component-index.html

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,120 @@
88
</head>
99
<body>
1010
<div data-cy-root></div>
11+
<script type="text/javascript">
12+
((e, t) => {
13+
const n = '__q_context__',
14+
o = window,
15+
i = new Set(),
16+
s = (t) => e.querySelectorAll(t),
17+
r = (e, t, n = t.type) => {
18+
s('[on' + e + '\\:' + n + ']').forEach((o) => f(o, e, t, n));
19+
},
20+
a = (e, t) => e.getAttribute(t),
21+
l = (t) => {
22+
if (void 0 === t._qwikjson_) {
23+
let n = (t === e.documentElement ? e.body : t).lastElementChild;
24+
for (; n; ) {
25+
if ('SCRIPT' === n.tagName && 'qwik/json' === a(n, 'type')) {
26+
t._qwikjson_ = JSON.parse(
27+
n.textContent.replace(/\\x3C(\/?script)/g, '<$1')
28+
);
29+
break;
30+
}
31+
n = n.previousElementSibling;
32+
}
33+
}
34+
},
35+
c = (e, t) => new CustomEvent(e, { detail: t }),
36+
f = async (t, o, i, s = i.type) => {
37+
const r = 'on' + o + ':' + s;
38+
t.hasAttribute('preventdefault:' + s) && i.preventDefault();
39+
const c = t._qc_,
40+
f = null == c ? void 0 : c.li.filter((e) => e[0] === r);
41+
if (f && f.length > 0) {
42+
for (const e of f)
43+
await e[1].getFn([t, i], () => t.isConnected)(i, t);
44+
return;
45+
}
46+
const d = a(t, r);
47+
if (d) {
48+
const o = t.closest('[q\\:container]'),
49+
s = new URL(a(o, 'q:base'), e.baseURI);
50+
for (const r of d.split('\n')) {
51+
const a = new URL(r, s),
52+
c = a.hash.replace(/^#?([^?[|]*).*$/, '$1') || 'default',
53+
f = performance.now(),
54+
d = import(a.href.split('#')[0]);
55+
l(o);
56+
const p = b(await d, c),
57+
w = e[n];
58+
if (t.isConnected)
59+
try {
60+
(e[n] = [t, i, a]),
61+
u('qsymbol', { symbol: c, element: t, reqTime: f }),
62+
await p(i, t);
63+
} finally {
64+
e[n] = w;
65+
}
66+
}
67+
}
68+
},
69+
u = (t, n) => {
70+
e.dispatchEvent(c(t, n));
71+
},
72+
b = (e, t) => {
73+
if (t in e) return e[t];
74+
for (const n of Object.values(e))
75+
if ('object' == typeof n && n && t in n) return n[t];
76+
},
77+
d = (e) => e.replace(/([A-Z])/g, (e) => '-' + e.toLowerCase()),
78+
p = async (e) => {
79+
let t = d(e.type),
80+
n = e.target;
81+
for (r('-document', e, t); n && n.getAttribute; )
82+
await f(n, '', e, t),
83+
(n =
84+
e.bubbles && !0 !== e.cancelBubble ? n.parentElement : null);
85+
},
86+
w = (e) => {
87+
r('-window', e, d(e.type));
88+
},
89+
q = () => {
90+
var n;
91+
const r = e.readyState;
92+
if (
93+
!t &&
94+
('interactive' == r || 'complete' == r) &&
95+
((t = 1),
96+
u('qinit'),
97+
(null != (n = o.requestIdleCallback) ? n : o.setTimeout).bind(o)(
98+
() => u('qidle')
99+
),
100+
i.has('qvisible'))
101+
) {
102+
const e = s('[on\\:qvisible]'),
103+
t = new IntersectionObserver((e) => {
104+
for (const n of e)
105+
n.isIntersecting &&
106+
(t.unobserve(n.target),
107+
f(n.target, '', c('qvisible', n)));
108+
});
109+
e.forEach((e) => t.observe(e));
110+
}
111+
},
112+
v = (e, t, n, o = !1) => e.addEventListener(t, n, { capture: o }),
113+
y = (t) => {
114+
for (const n of t)
115+
i.has(n) || (v(e, n, p, !0), v(o, n, w), i.add(n));
116+
};
117+
if (!e.qR) {
118+
const t = o.qwikevents;
119+
Array.isArray(t) && y(t),
120+
(o.qwikevents = { push: (...e) => y(e) }),
121+
v(e, 'readystatechange', q),
122+
q();
123+
}
124+
})(document);
125+
</script>
11126
</body>
12127
</html>

packages/headless/cypress/tsconfig.cy.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
"../**/*.cy.tsx",
1313
"../**/*.cy.js",
1414
"../**/*.cy.jsx",
15+
"../**/*.spec.ts",
16+
"../**/*.spec.tsx",
17+
"../**/*.spec.js",
18+
"../**/*.spec.jsx",
1519
"../**/*.d.ts"
1620
]
1721
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { mount } from 'cypress-ct-qwik';
2+
import { Accordion, AccordionItem } from './accordion';
3+
4+
describe('Accordion', () => {
5+
it('should render an Accordion', () => {
6+
mount(
7+
<Accordion>
8+
<AccordionItem label="Heading 1">
9+
<p>
10+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus
11+
aliquid architecto delectus deleniti dolor
12+
</p>
13+
</AccordionItem>
14+
<AccordionItem label="Heading 2">
15+
<p>
16+
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus
17+
aliquid architecto delectus deleniti dolor
18+
</p>
19+
</AccordionItem>
20+
</Accordion>
21+
);
22+
23+
cy.contains(/Heading 1/i).click();
24+
cy.get('.content').should('exist');
25+
cy.contains(/Heading 2/i).should('exist');
26+
});
27+
});

packages/headless/src/root.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default () => {
2+
return <div>Accordion</div>;
3+
};

packages/headless/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ export default defineConfig({
2828
allow: ['../../'],
2929
},
3030
},
31-
mode: 'lib',
31+
3232
// Configuration for building your library.
3333
// See: https://vitejs.dev/guide/build.html#library-mode
3434
build: {

0 commit comments

Comments
 (0)