@@ -3,6 +3,7 @@ import { render } from '@testing-library/react'
3
3
import '@testing-library/jest-dom/extend-expect'
4
4
5
5
import Anchorme from './Anchorme'
6
+ import { LinkComponentProps } from './types'
6
7
7
8
describe ( 'Anchorme' , ( ) => {
8
9
const URL = 'http://www.example.loc'
@@ -62,4 +63,90 @@ describe('Anchorme', () => {
62
63
expect ( linkEl ?. rel ) . toBe ( 'noreferrer noopener' )
63
64
expect ( getByText ( URL ) ) . toBeInTheDocument ( )
64
65
} )
66
+
67
+ it ( 'should render with custom link component' , ( ) => {
68
+ const CustomLink = ( props : LinkComponentProps ) => {
69
+ return (
70
+ < i >
71
+ < a { ...props } />
72
+ </ i >
73
+ )
74
+ }
75
+
76
+ const { container, getByText } = render (
77
+ < Anchorme
78
+ linkComponent = { CustomLink }
79
+ target = "_blank"
80
+ rel = "noreferrer noopener"
81
+ >
82
+ { URL }
83
+ </ Anchorme > ,
84
+ )
85
+
86
+ const linkEl = container . querySelector ( 'a' )
87
+ expect ( linkEl ) . not . toBeNull ( )
88
+ expect ( linkEl ?. href ) . toBe ( `${ URL } /` )
89
+ expect ( linkEl ?. target ) . toBe ( '_blank' )
90
+ expect ( linkEl ?. rel ) . toBe ( 'noreferrer noopener' )
91
+ expect ( getByText ( URL ) ) . toBeInTheDocument ( )
92
+ } )
93
+
94
+ it ( 'should render with custom component' , ( ) => {
95
+ const customCallback = jest . fn < void , [ string ] > ( )
96
+
97
+ const CustomLink = ( { href, children } : LinkComponentProps ) => {
98
+ return (
99
+ < strong >
100
+ < span onClick = { ( ) => customCallback ( href ) } > { children } </ span >
101
+ </ strong >
102
+ )
103
+ }
104
+
105
+ const { container, getByText } = render (
106
+ < Anchorme linkComponent = { CustomLink } > { URL } </ Anchorme > ,
107
+ )
108
+
109
+ const linkEl = container . querySelector ( 'span' )
110
+ expect ( linkEl ) . not . toBeNull ( )
111
+ expect ( getByText ( URL ) ) . toBeInTheDocument ( )
112
+
113
+ linkEl ?. click ( )
114
+ expect ( customCallback ) . toHaveBeenCalledTimes ( 1 )
115
+ expect ( customCallback ) . toHaveBeenCalledWith ( URL )
116
+ } )
117
+
118
+ it ( 'should render with custom inline component' , ( ) => {
119
+ const customCallback = jest . fn < void , [ string ] > ( )
120
+
121
+ const { container, getByText } = render (
122
+ < Anchorme
123
+ linkComponent = { ( { href, children } ) => (
124
+ < a
125
+ href = { href }
126
+ onClick = { ( event ) => {
127
+ event . preventDefault ( )
128
+ customCallback ( 'link click' )
129
+ } }
130
+ target = "_blank"
131
+ rel = "noreferrer noopener"
132
+ >
133
+ { children }
134
+ </ a >
135
+ ) }
136
+ >
137
+ { URL }
138
+ </ Anchorme > ,
139
+ )
140
+
141
+ const linkEl = container . querySelector ( 'a' )
142
+ expect ( linkEl ) . not . toBeNull ( )
143
+ expect ( linkEl ?. href ) . toBe ( `${ URL } /` )
144
+ expect ( linkEl ?. target ) . toBe ( '_blank' )
145
+ expect ( linkEl ?. rel ) . toBe ( 'noreferrer noopener' )
146
+ expect ( getByText ( URL ) ) . toBeInTheDocument ( )
147
+
148
+ linkEl ?. click ( )
149
+ expect ( customCallback ) . toHaveBeenCalledTimes ( 1 )
150
+ expect ( customCallback ) . toHaveBeenCalledWith ( 'link click' )
151
+ } )
65
152
} )
0 commit comments