|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
17 | | -import { assert } from "chai"; |
18 | | -import { mount, shallow } from "enzyme"; |
| 17 | +import { render, screen } from "@testing-library/react"; |
| 18 | +import userEvent from "@testing-library/user-event"; |
| 19 | +import { expect } from "chai"; |
19 | 20 | import * as React from "react"; |
20 | 21 | import sinon from "sinon"; |
21 | 22 |
|
22 | 23 | import { Card, Classes, H4 } from "../../src"; |
| 24 | +import { hasClass } from "../utils"; |
23 | 25 |
|
24 | 26 | describe("<Card>", () => { |
25 | | - it("supports elevation, interactive, and className props", () => { |
26 | | - const wrapper = shallow(<Card elevation={3} interactive={true} className={Classes.TEXT_MUTED} />); |
| 27 | + it("should support elevation, interactive, and className props", () => { |
| 28 | + render( |
| 29 | + <Card elevation={3} interactive={true} className={Classes.TEXT_MUTED}> |
| 30 | + Test |
| 31 | + </Card>, |
| 32 | + ); |
| 33 | + const card = screen.getByText("Test"); |
27 | 34 |
|
28 | | - assert.isTrue(wrapper.hasClass(Classes.CARD), Classes.CARD); |
29 | | - assert.isTrue(wrapper.hasClass(Classes.ELEVATION_3), Classes.ELEVATION_3); |
30 | | - assert.isTrue(wrapper.hasClass(Classes.INTERACTIVE), Classes.INTERACTIVE); |
31 | | - assert.isTrue(wrapper.hasClass(Classes.TEXT_MUTED), Classes.TEXT_MUTED); |
| 35 | + expect(hasClass(card, Classes.CARD)).to.be.true; |
| 36 | + expect(hasClass(card, Classes.ELEVATION_3)).to.be.true; |
| 37 | + expect(hasClass(card, Classes.INTERACTIVE)).to.be.true; |
| 38 | + expect(hasClass(card, Classes.TEXT_MUTED)).to.be.true; |
32 | 39 | }); |
33 | 40 |
|
34 | | - it("renders children", () => { |
35 | | - const wrapper = shallow( |
| 41 | + it("should render children", () => { |
| 42 | + render( |
36 | 43 | <Card> |
37 | 44 | <H4>Card content</H4> |
38 | 45 | </Card>, |
39 | 46 | ); |
40 | | - assert.isTrue(wrapper.find(H4).exists()); |
| 47 | + |
| 48 | + expect(screen.getByText("Card content")).to.exist; |
41 | 49 | }); |
42 | 50 |
|
43 | | - it("calls onClick when card is clicked", () => { |
| 51 | + it("should call onClick when card is clicked", async () => { |
44 | 52 | const onClick = sinon.spy(); |
45 | | - shallow(<Card onClick={onClick} />).simulate("click"); |
46 | | - assert.isTrue(onClick.calledOnce); |
| 53 | + render(<Card onClick={onClick}>Test</Card>); |
| 54 | + const card = screen.getByText("Test"); |
| 55 | + |
| 56 | + await userEvent.click(card); |
| 57 | + |
| 58 | + expect(onClick.calledOnce).to.be.true; |
47 | 59 | }); |
48 | 60 |
|
49 | | - it("supports HTML props", () => { |
| 61 | + it("should support HTML props", () => { |
50 | 62 | const onChange = sinon.spy(); |
51 | | - const card = shallow(<Card onChange={onChange} title="foo" tabIndex={4000} />).find("div"); |
52 | | - assert.strictEqual(card.prop("onChange"), onChange); |
53 | | - assert.strictEqual(card.prop("title"), "foo"); |
| 63 | + render( |
| 64 | + <Card onChange={onChange} title="foo" tabIndex={4000}> |
| 65 | + Test |
| 66 | + </Card>, |
| 67 | + ); |
| 68 | + const card = screen.getByText("Test"); |
| 69 | + |
| 70 | + expect(card.getAttribute("title")).to.equal("foo"); |
| 71 | + expect(card.tabIndex).to.equal(4000); |
54 | 72 | }); |
55 | 73 |
|
56 | | - it("supports ref prop", () => { |
| 74 | + it("should support ref prop", () => { |
57 | 75 | const elementRef = React.createRef<HTMLDivElement>(); |
58 | | - mount(<Card ref={elementRef} />); |
59 | | - assert.isDefined(elementRef.current); |
| 76 | + render(<Card ref={elementRef}>Test</Card>); |
| 77 | + |
| 78 | + expect(elementRef.current).to.exist; |
60 | 79 | }); |
61 | 80 | }); |
0 commit comments