Skip to content

Commit 772323f

Browse files
committed
test: ✅ Ajoute des tests avec Cypress pour Accordion
Teste ce qui est difficile de tester dans des tests unitaires
1 parent af9e2a3 commit 772323f

File tree

2 files changed

+133
-1
lines changed

2 files changed

+133
-1
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
import { mount } from '@cypress/vue'
2+
import DsfrAccordion from './DsfrAccordion.vue'
3+
import DsfrAccordionsGroup from './DsfrAccordionsGroup.vue'
4+
import VIcon from '../../icons.js'
5+
6+
import '../../main.css'
7+
8+
const title1 = 'Intitulé de l’accordéon 1'
9+
const content1 = 'Contenu de l’accordéon 1'
10+
const title2 = 'Intitulé de l’accordéon 2'
11+
const content2 = 'Contenu de l’accordéon 2'
12+
const title3 = 'Intitulé de l’accordéon 3'
13+
const content3 = 'Contenu de l’accordéon 3'
14+
15+
const AccordionWrapper = {
16+
components: {
17+
DsfrAccordion,
18+
DsfrAccordionsGroup,
19+
VIcon,
20+
},
21+
22+
data () {
23+
return {
24+
title1,
25+
title2,
26+
title3,
27+
content1,
28+
content2,
29+
content3,
30+
}
31+
},
32+
33+
template: `
34+
<div :data-rf-theme="dark ? 'dark' : ''" style="background-color: var(--w); padding: 1rem;">
35+
<DsfrAccordionsGroup>
36+
<li>
37+
<DsfrAccordion
38+
id="accordion1"
39+
title="Titre de mon accordéon"
40+
>
41+
Contenu de l’accordéon
42+
</DsfrAccordion>
43+
</li>
44+
<li>
45+
<DsfrAccordion
46+
id="accordion2"
47+
:title="title2"
48+
>
49+
Contenu de l’accordéon
50+
</DsfrAccordion>
51+
</li>
52+
<li>
53+
<DsfrAccordion
54+
id="accordion3"
55+
:title="title3"
56+
>
57+
Contenu de l’accordéon
58+
</DsfrAccordion>
59+
</li>
60+
</DsfrAccordionsGroup>
61+
</div>`,
62+
}
63+
64+
describe('DsfrAccordion', () => {
65+
it('should mount Accordion', () => {
66+
const title = 'Intitulé de l’accordéon'
67+
const content = 'Contenu de l’accordéon'
68+
69+
mount(DsfrAccordion, {
70+
global: {
71+
components: {
72+
VIcon,
73+
},
74+
},
75+
props: {
76+
title,
77+
expanded: false,
78+
},
79+
slots: {
80+
default: () => content,
81+
},
82+
})
83+
.get('.fr-collapse')
84+
.should('not.be.visible')
85+
86+
cy.get('.fr-accordion__btn')
87+
.click()
88+
.get('.fr-collapse')
89+
.should('be.visible')
90+
91+
cy.tab()
92+
.get('.fr-accordion__btn')
93+
.contains(title)
94+
.type('{enter}')
95+
.get('.fr-collapse')
96+
.should('not.be.visible')
97+
})
98+
99+
it('should mount AccordionsGroup', () => {
100+
mount(AccordionWrapper)
101+
.get('.fr-collapse')
102+
.should('not.be.visible')
103+
104+
cy.tab()
105+
.get('li:first-child .fr-accordion__btn')
106+
.should('have.focus')
107+
.contains(title1)
108+
.type('{enter}')
109+
.get('.fr-collapse')
110+
.should('be.visible')
111+
112+
cy.tab()
113+
.get('li:nth-child(2) .fr-accordion__btn')
114+
.should('have.focus')
115+
.contains(title2)
116+
.type(' ')
117+
.get('#accordion2')
118+
.should('be.visible')
119+
.get('li:nth-child(2) .fr-accordion__btn')
120+
.should('have.focus')
121+
.contains(title2)
122+
.type(' ')
123+
.get('#accordion2')
124+
.should('not.be.visible')
125+
})
126+
})

src/components/DsfrAccordion/DsfrAccordion.vue

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ export default {
2222
}
2323
},
2424
25+
methods: {
26+
toggleExpanded () {
27+
this.expanded = !this.expanded
28+
},
29+
},
30+
2531
}
2632
</script>
2733

@@ -32,7 +38,7 @@ export default {
3238
class="fr-accordion__btn"
3339
:aria-expanded="expanded"
3440
:aria-controls="id"
35-
@click="expanded = !expanded"
41+
@click="toggleExpanded()"
3642
>
3743
<VIcon
3844
v-show="!expanded"

0 commit comments

Comments
 (0)