UNPKG

2.07 kBJavaScriptView Raw
1import React from 'react';
2import { createEvent, fireEvent, render, screen } from '@testing-library/react';
3import user from '@testing-library/user-event';
4import { NavLink } from '..';
5import {
6 testForChildrenInComponent,
7 testForCustomClass,
8 testForCustomTag,
9 testForDefaultClass,
10} from '../testUtils';
11
12describe('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});