Refactored test, so UT can run properly

This commit is contained in:
Jason Zhu 2023-03-02 20:23:53 +11:00
parent 1a98c9b40e
commit 3b5d2a2407
3 changed files with 39 additions and 13 deletions

View File

@ -1,9 +1,17 @@
import React from 'react';
import { render, screen } from '@testing-library/react';
import {render, screen} from '@testing-library/react';
import { createStore } from "redux";
import { Provider } from "react-redux";
import App from './App';
import {todoReducer} from "../state/todo/reducers";
test('renders learn react link', () => {
render(<App />);
const linkElement = screen.getByText(/learn react/i);
const store = createStore(todoReducer);
render(
<Provider store={store}>
<App />
</Provider>
)
const linkElement = screen.getByText(/Todo List/i);
expect(linkElement).toBeInTheDocument();
});

View File

@ -1,35 +1,53 @@
import React from "react";
import {screen, render, fireEvent, getByRole} from "@testing-library/react"
import { createStore } from "redux";
import { Provider } from "react-redux";
import Todo from "./Todo";
import {todoReducer} from "../../state/todo/reducers";
import {store} from "../../state/store";
describe("Todo", () => {
const props = {
id: 1,
text: "Buy milk",
completed: false,
onToggle: jest.fn(),
onDelete: jest.fn(),
};
it("should render todo text", () => {
render(<Todo {...props} />);
render(
<Provider store={store}>
<Todo {...props}/>
</Provider>
)
expect(screen.getByText(props.text)).toBeInTheDocument();
});
it("should call onToggle when checkbox is clicked", () => {
render(<Todo {...props} />);
render(
<Provider store={store}>
<Todo {...props} />
</Provider>
)
fireEvent.click(screen.getByRole("checkbox"));
expect(props.onToggle).toBeCalledWith(props.id);
});
it("should call onDelete when delete button is clicked", () => {
render(<Todo {...props} />);
render(
<Provider store={store}>
<Todo {...props} />
</Provider>
)
fireEvent.click(screen.getByRole("button"));
expect(props.onDelete).toBeCalledWith(props.id);
})
it("should have line-through style when completed is true", () => {
render(<Todo {...props} completed={true} />);
render(
<Provider store={store}>
<Todo {...props} completed={true} />
</Provider>
)
expect(screen.getByText(props.text)).toHaveStyle("text-decoration: line-through");
})
})

View File

@ -1,5 +1,5 @@
import { createStore } from "redux";
import { todoReducer } from "./todo/reducers";
import {todoReducer} from "./todo/reducers";
export const store = createStore(todoReducer);