J'essaye simplement de changer un compteur et de montrer que la valeur a changé. Je fais ça avec getByTestId
donc ça pourrait être le problème?
Voici ma composante:
import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
const [count, setCounter] = useState(0)
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
div
<div
onClick={() => setCounter(prevCount => prevCount + 1)}
data-testid="addCount"
>
+
</div>
<div data-testid="count">
{count}
</div>
<div
onClick={() => setCounter(prevCount => prevCount - 1)}
data-testid="minusCount"
>
-
</div>
<a
className="App-link"
href="https://reactjs.org"
target="_blank"
rel="noopener noreferrer"
>
Learn React
</a>
</header>
</div>
);
}
export default App;
Voici le test que j'essaie de lancer:
describe('State is managed correctly', () => {
const { getByTestId } = render(<App />)
const add = getByTestId(`addCount`)
const count = getByTestId(`count`)
it('count starts at 0', () => {
expect(count).toHaveTextContent("0")
})
it('count added, value should be 1', () => {
fireEvent.click(add)
expect(count).toHaveTextContent("1") // error count is still 0
})
})
describe('State is managed correctly', () => {
const { getByTestId } = render(<App />)
const add = getByTestId(`addCount`)
const count = getByTestId(`count`)
const spy = jest.spyOn(add, 'click');
it('count starts at 0', () => {
expect(count).toHaveTextContent("0")
})
it('count added, value should be 1', () => {
add.click();
expect(count).toHaveTextContent("1") // error count is still 0
spy.mockRestore();
})
})
Chaque fois que vous devez vérifier quelque chose, vous devez réexécuter la requête. const count = getByTestId('count')
définit count
à la valeur initiale, vous devez donc lui demander de rechercher à nouveau le nombre après le déclenchement de l'événement.
it('count added, value should be 1', () => {
fireEvent.click(add)
count = getByTestId('count')
expect(count).toHaveTextContent("1") // error count is still 0
})