11import React from 'react' ;
22import { render } from '@testing-library/react' ;
3+ import type { NHSUKSize } from '@util/types/NHSUKTypes' ;
34import Label from '../Label' ;
45
56describe ( 'Label' , ( ) => {
@@ -10,22 +11,44 @@ describe('Label', () => {
1011 expect ( container . innerHTML ) . toBe ( '<label class="nhsuk-label">Text</label>' ) ;
1112 } ) ;
1213
13- it ( 'can render with size m ', ( ) => {
14- const { container } = render ( < Label size = "m" > Text</ Label > ) ;
14+ it . each < NHSUKSize > ( [ 's' , 'm' , 'l' , 'xl' ] ) ( 'renders with custom size %s ', ( size ) => {
15+ const { container } = render ( < Label size = { size } > Text</ Label > ) ;
1516
16- expect ( container . textContent ) . toBe ( 'Text' ) ;
17- expect ( container . innerHTML ) . toBe ( '<label class="nhsuk-label nhsuk-label--m">Text</label>' ) ;
17+ const labelEl = container . querySelector ( '.nhsuk-label' ) ;
18+
19+ expect ( labelEl ) . toHaveTextContent ( 'Text' ) ;
20+ expect ( labelEl ) . toHaveClass ( `nhsuk-label--${ size } ` ) ;
1821 } ) ;
1922
20- it ( 'can render with heading prop ' , ( ) => {
23+ it ( 'renders as page heading' , ( ) => {
2124 const { container } = render ( < Label isPageHeading > Text</ Label > ) ;
2225
23- expect ( container . querySelector ( '.nhsuk-label.nhsuk-label--xl' ) ?. textContent ) . toBe ( 'Text' ) ;
24- expect ( container . innerHTML ) . toBe (
25- '<h1 class="nhsuk-label-wrapper"><label class="nhsuk-label nhsuk-label--xl">Text</label></h1>' ,
26- ) ;
26+ const headingEl = container . querySelector ( '.nhsuk-label-wrapper' ) ;
27+ const labelEl = headingEl ?. querySelector ( '.nhsuk-label' ) ;
28+
29+ expect ( headingEl ?. tagName ) . toBe ( 'H1' ) ;
30+ expect ( labelEl ) . toHaveTextContent ( 'Text' ) ;
31+ expect ( labelEl ) . not . toHaveClass ( `nhsuk-label--xl` ) ;
2732 } ) ;
2833
34+ it . each < NHSUKSize > ( [ 's' , 'm' , 'l' , 'xl' ] ) (
35+ 'renders as page heading with custom size %s' ,
36+ ( size ) => {
37+ const { container } = render (
38+ < Label isPageHeading size = { size } >
39+ Text
40+ </ Label > ,
41+ ) ;
42+
43+ const headingEl = container . querySelector ( '.nhsuk-label-wrapper' ) ;
44+ const labelEl = headingEl ?. querySelector ( '.nhsuk-label' ) ;
45+
46+ expect ( headingEl ?. tagName ) . toBe ( 'H1' ) ;
47+ expect ( labelEl ) . toHaveTextContent ( 'Text' ) ;
48+ expect ( labelEl ) . toHaveClass ( `nhsuk-label--${ size } ` ) ;
49+ } ,
50+ ) ;
51+
2952 it ( 'renders null with no children' , ( ) => {
3053 const { container } = render ( < Label /> ) ;
3154
0 commit comments