import ActionLink from "./action-link"; import { mount } from "enzyme"; import ezJson from "enzyme-to-json"; import Enzyme from "enzyme"; import Adapter from "enzyme-adapter-react-16"; Enzyme.configure({ adapter: new Adapter() }); it("dispatches an action on click", () => { // given const store = { pathForAction: jest.fn(() => "/my/path"), dispatch: jest.fn() }; const props = { action: { type: "ACTION", id: "123" }, children: "Hello World!" }; const context = { store }; const wrapper = mount(ActionLink(props, context)); // when wrapper.simulate("click"); //then expect(store.pathForAction.mock.calls).toEqual([ [{ type: "ACTION", id: "123" }] ]); expect(store.dispatch.mock.calls).toEqual([[{ type: "ACTION", id: "123" }]]); }); it("renders the url calculated by our internal function", () => { // given const store = { pathForAction: jest.fn(() => "/my/path"), dispatch: jest.fn() }; const props = { action: {}, children: "Hello World!" }; const context = { store }; const wrapper = mount(ActionLink(props, context)); expect(ezJson(wrapper)).toMatchSnapshot(); }); it("additional props are passed through", () => { // given const store = { pathForAction: jest.fn(() => "/my/path"), dispatch: jest.fn() }; const props = { action: {}, children: "Hello World!", className: "foo" }; const context = { store }; const wrapper = mount(ActionLink(props, context)); expect(ezJson(wrapper)).toMatchSnapshot(); });