Skip to content

Commit b810041

Browse files
committed
Alter stopping.. timeout test to work
1 parent ec1236e commit b810041

2 files changed

Lines changed: 36 additions & 31 deletions

File tree

src/components/RunButton/StopButton.js

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const StopButton = (props) => {
77

88
const codeRunStopped = useSelector((state) => state.editor.codeRunStopped);
99
const codeRunTriggered = useSelector((state) => state.editor.codeRunTriggered);
10-
const [, setTimeoutId] = useState(null);
1110
const dispatch = useDispatch();
1211

1312
const onClickStop = () => {
@@ -21,14 +20,10 @@ const StopButton = (props) => {
2120
const [button, setButton] = useState(stop)
2221

2322
useEffect(() => {
24-
const stopping = <Button buttonText="Stopping..." disabled />
25-
const id = setTimeout(
26-
function() {
27-
if (codeRunStopped) {
28-
setButton(stopping)
29-
}
30-
}, 100);
31-
setTimeoutId(id);
23+
if (codeRunStopped) {
24+
const stopping = <Button buttonText="Stopping..." disabled />
25+
setTimeout(() => { setButton(stopping) }, 100);
26+
}
3227
}, [codeRunStopped]);
3328

3429
return (
Lines changed: 32 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,49 @@
1-
import React from "react";
2-
import { render, fireEvent } from "@testing-library/react";
3-
import { Provider } from 'react-redux';
4-
import StopButton from "./StopButton";
5-
import store from '../../app/store';
1+
import React from "react"
2+
import { act, render, fireEvent, waitFor } from "@testing-library/react"
3+
import { Provider } from 'react-redux'
4+
import StopButton from "./StopButton"
5+
import store from '../../app/store'
66
import { codeRunHandled, triggerCodeRun } from '../Editor/EditorSlice'
77

8+
beforeEach(() => {
9+
jest.useFakeTimers()
10+
})
11+
12+
afterEach(() => {
13+
jest.useRealTimers()
14+
})
815

916
test("Clicking stop button sets codeRunStopped to true", () => {
1017
store.dispatch(codeRunHandled())
1118
store.dispatch(triggerCodeRun())
1219

13-
const { getByText } = render(
14-
<Provider store={store}>
15-
<StopButton buttonText="Stop Code" />
16-
</Provider>);
20+
const component = render(
21+
<Provider store={store}>
22+
<StopButton buttonText="Stop Code" />
23+
</Provider>
24+
)
1725

18-
const stopButton = getByText(/Stop Code/);
19-
fireEvent.click(stopButton);
26+
const stopButton = component.getByRole('button')
27+
fireEvent.click(stopButton)
2028

21-
expect(store.getState().editor.codeRunStopped).toEqual(true);
29+
expect(store.getState().editor.codeRunStopped).toEqual(true)
2230
})
2331

24-
test("Clicking stop button changes it to 'Stopping...' after 100ms", () => {
32+
test("Clicking stop button changes it to 'Stopping...' after a time out", () => {
2533
store.dispatch(codeRunHandled())
2634
store.dispatch(triggerCodeRun())
2735

28-
const { getByText } = render(
29-
<Provider store={store}>
36+
const component = render(
37+
<Provider store={store}>
3038
<StopButton buttonText="Stop Code" />
31-
</Provider>
32-
);
33-
const stopButton = getByText(/Stop Code/);
34-
fireEvent.click(stopButton);
35-
expect(stopButton.textContent).toEqual("Stop Code")
36-
new Promise(resolve => setTimeout(resolve, 100)).then( () =>
37-
expect(stopButton.textContent).toEqual("Stopping...")
39+
</Provider>
3840
)
41+
const stopButton = component.getByRole('button')
42+
expect(stopButton.textContent).toEqual("Stop Code")
43+
44+
fireEvent.click(stopButton)
45+
expect(stopButton.textContent).toEqual("Stop Code")
46+
47+
act(() => { jest.runAllTimers(); } )
48+
expect(stopButton.textContent).toEqual("Stopping...")
3949
})

0 commit comments

Comments
 (0)