反应挂钩单元测试

时间:2020-01-08 11:39:24

标签: javascript reactjs unit-testing jestjs

我有以下内容:

@echo off

set Source=Source folder
set Target=Destination folder

set MaxLimit=100

for /f "tokens=1* delims=[]" %%G in ('dir /A-D /B "%Source%\*.*" ^| find /v /n ""') do (
    move /y "%Source%\%%~nxH" "%Target%"
    if %%G==%MaxLimit% exit /b 0
)

由于它也是一个连接的组件,所以我添加了以下测试:

const Repairs: React.FC<RepairsProps> = ({repairs, repairsPropertyLoad}) => {
  const { t } = useTranslation()
  const [isARepair, setRepair] = useState(true)
  const handleOnClick = () => { 
    setRepair(false)
    repairsPropertyLoad('token')
  }

  return ( isARepair ? <p>on</p> : <p>off</p> )
  ...

如何测试describe('Repairs', () => { let store: any let component: any beforeEach(() => { store = mockStore({ repairs: mockRepairs }) store.dispatch = jest.fn() component = render( <Provider store={store}> <Repairs /> </Provider> ) }) it('should render the Repairs component correctly', () => { expect(component).toMatchSnapshot() }) it('should find the repair button in the document', () => { const { getByText } = component const repairsButton = getByText('Repair') expect(repairsButton).toBeInTheDocument() }) }) 标志场景(对与错),以便可以对isARepairoff结果进行快照?

1 个答案:

答案 0 :(得分:3)

我强烈建议您编写测试,就像最终用户正在使用您的UI一样。例如,当用户单击按钮时,您将setIsRepair设置为false。您可以使用fireEvent模拟按钮的点击:

fireEvent.click(repairsButton);
expect(getByText('off')).not.toBeNull();
// this might not be the exact code but you get the gist

如果要测试挂钩,则应创建一个自定义挂钩,将其渲染为虚拟测试组件,然后测试返回值;或使用React Hooks Testing Library。但是,如果您的状态逻辑像单个useState一样简单,我建议您不要对其进行测试,因为您实际上将在测试React的useState而不是测试自己的状态逻辑。我的建议是测试由很多部分组成的状态逻辑(它非常复杂,需要进行测试)。