我试图基本上只是更改一个计数器并显示该值已更改。我正在使用getByTestId
进行此操作,所以可能是问题所在?
这是我的组件:
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;
这是我要运行的测试:
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
})
})
答案 0 :(得分:1)
看起来像我希望的那样,您不能真正在“反应测试库”中“管理”状态。从阅读文档看来,您也不应该那样。
这是我的解决方法:
import React from 'react'
import { render, fireEvent, cleanup } from '@testing-library/react'
import App from '../src/App'
afterEach(cleanup)
describe('App component loads correctly', () => {
const { container } = render(<App />)
const { firstChild } = container
test('renders correctly', () => {
expect(container).toHaveTextContent(`Learn React`)
})
test('first child should contain class "App"', () => {
expect(firstChild).toHaveClass(`App`)
})
})
describe('State is managed correctly', () => {
it('count starts at 0', () => {
const { getByTestId } = render(<App />)
const count = getByTestId(`count`)
expect(count.innerHTML).toBe("0")
})
it('should add 1 to count', () => {
const { getByTestId } = render(<App />)
const count = getByTestId(`count`)
const add = getByTestId(`addCount`)
fireEvent.click(add)
expect(count.innerHTML).toBe("1")
})
it('should minus 1 from count', () => {
const { getByTestId } = render(<App />)
const count = getByTestId(`count`)
const minus = getByTestId(`minusCount`)
fireEvent.click(minus)
expect(count.innerHTML).toBe("-1")
})
})
答案 1 :(得分:0)
每次您都需要验证一些内容以重新运行查询。 const count = getByTestId('count')
将count
设置为初始值,因此您需要告诉它在触发事件后再次查找计数。
it('count added, value should be 1', () => {
fireEvent.click(add)
count = getByTestId('count')
expect(count).toHaveTextContent("1") // error count is still 0
})
答案 2 :(得分: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();
})
})