1 | import React from 'react';
|
2 | import { createEvent, fireEvent, render, screen } from '@testing-library/react';
|
3 | import user from '@testing-library/user-event';
|
4 | import { NavLink } from '..';
|
5 | import {
|
6 | testForChildrenInComponent,
|
7 | testForCustomClass,
|
8 | testForCustomTag,
|
9 | testForDefaultClass,
|
10 | } from '../testUtils';
|
11 |
|
12 | describe('NavLink', () => {
|
13 | it('should render .nav-link markup', () => {
|
14 | testForDefaultClass(NavLink, 'nav-link');
|
15 | });
|
16 |
|
17 | it('should render custom tag', () => {
|
18 | testForCustomTag(NavLink);
|
19 | });
|
20 |
|
21 | it('should render children', () => {
|
22 | testForChildrenInComponent(NavLink);
|
23 | });
|
24 |
|
25 | it('should pass additional classNames', () => {
|
26 | testForCustomClass(NavLink);
|
27 | });
|
28 |
|
29 | it('should render active class', () => {
|
30 | render(<NavLink active>Yo!</NavLink>);
|
31 | expect(screen.getByText('Yo!')).toHaveClass('active');
|
32 | });
|
33 |
|
34 | it('should render disabled markup', () => {
|
35 | render(<NavLink disabled>Yo!</NavLink>);
|
36 | expect(screen.getByText('Yo!')).toHaveAttribute('disabled');
|
37 | });
|
38 |
|
39 | it('handles onClick prop', () => {
|
40 | const onClick = jest.fn();
|
41 | render(<NavLink onClick={onClick}>testing click</NavLink>);
|
42 |
|
43 | user.click(screen.getByText(/testing click/i));
|
44 | expect(onClick).toHaveBeenCalled();
|
45 | });
|
46 |
|
47 | it('handles onClick events', () => {
|
48 | render(<NavLink>hello</NavLink>);
|
49 | const node = screen.getByText(/hello/i);
|
50 | const click = createEvent.click(node);
|
51 | fireEvent(node, click);
|
52 |
|
53 | expect(click.defaultPrevented).toBeFalsy();
|
54 | });
|
55 |
|
56 | it('prevents link clicks via onClick for dropdown nav-items', () => {
|
57 | render(<NavLink href="#">hello</NavLink>);
|
58 | const node = screen.getByText(/hello/i);
|
59 | const click = createEvent.click(node);
|
60 | fireEvent(node, click);
|
61 |
|
62 | expect(click.defaultPrevented).toBeTruthy();
|
63 | });
|
64 |
|
65 | it('is not called when disabled', () => {
|
66 | const onClick = jest.fn();
|
67 | render(
|
68 | <NavLink onClick={onClick} disabled>
|
69 | testing click
|
70 | </NavLink>,
|
71 | );
|
72 |
|
73 | user.click(screen.getByText(/testing click/i));
|
74 | expect(onClick).not.toHaveBeenCalled();
|
75 | });
|
76 | });
|