繁体   English   中英

未定义的使用选择器

[英]useSelector of Undefined

嗨,我正在为一个包含 redux 的组件编写单元测试。 在测试它时,抛出一个错误 UseSelector state undefined。 UseSelector 将在从 api 获得响应后更新一次。 直到它的值未定义。 但是在单元测试时它会在第一个本身上引发错误。 如何克服这个问题。

测试文件

import React from 'react';
import { render, fireEvent } from '@testing-library/react';
import { act } from 'react-dom/test-utils';
import '@testing-library/jest-dom/extend-expect';
import { createStore } from 'redux';
import { Provider } from 'react-redux';
import LinkApplication from '../index';
import {reducer} from '../../../redux/summary/reducer';
let INITIAL_STATES = {
    isFetching: false,
    errorMessage: "",
    requestExtensionErrorMessage: "",
    requestExtensionSuccessMessage: "",
    linkApplicationSuccess: "",
    linkApplicationFailure: null,
    linkLoanSuccessMessage: "",
    linkLoanErrorMessage: "",
    LinkApplicationErrorMessage:"",
  };
function renderWithRedux(
  component,
  { INITIAL_STATES, store = createStore(reducer, INITIAL_STATES) } = {},
) {
  return {
    ...render(<Provider store={store}>{component}</Provider>),
  };
}
it('sumbits the form', async () => {
  const onSubmit = jest.fn();
  const { getByText, getByTestId } = renderWithRedux(
    <LinkApplication onSubmit={onSubmit} />,
  );
  const Dob_Input = getByTestId('dob-input');
  const Phone_Input = getByTestId('phone-input');
  const form = getByTestId('form');
  act(() => {
    fireEvent.keyPress(Dob_Input, {
      target: { value: '1995-09-27' },
    });
    fireEvent.keyPress(Phone_Input, { target: { value: '9500902621' } });
  });
  expect(Dob_Input.value).toBe('1995-09-27');
  expect(Phone_Input.value).toBe('9500902621');
  await act(() => {
    fireEvent.submit(form);
  });
  expect(onSubmit).not.toHaveBeenCalled();
})

成分

const LinkApplication = () => {
  const dispatch = useDispatch();
  let LinkApplicationErrorMessage = useSelector(
    state => state.summary.linkApplicationFailure
  );
}

错误

TypeError: Cannot read property 'linkApplicationFailure' of undefined
const dispatch = useDispatch();
let LinkApplicationErrorMessage = useSelector(
state => state.summary.linkApplicationFailure
^
);

请帮我解决这个问题。

我认为你需要模拟react-redux

import * as React from 'react';
import { shallow } from 'enzyme';
jest.mock('react-redux', () => ({
  useDispatch: () => {},
  useSelector: () => ({
    your: 'state',
  }),
}));
import Component from './index';
describe('Test component', () => {
  it('Should render and match the snapshot', () => {
    const wrapper = shallow(<Component />);
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM