首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用redux-toolkit测试react组件

使用redux-toolkit测试react组件
EN

Stack Overflow用户
提问于 2021-09-06 11:26:28
回答 1查看 33关注 0票数 0

我有一个这样的组件:

代码语言:javascript
复制
export const DetailsItem: FC = (): ReactElement => {
  const { isInEditMode } = useAppSelector(({ editMode }) => editMode);
  if (isInEditMode) {
    return <DetailsItemEdit />;
  }
  return <DetailsItemDisplay />;
};

我正在试着测试它。

代码语言:javascript
复制
describe('DetailsItem', () => {
  it('should render DetailsItemDisplay component', () => {
    render(
      <Provider store={}> // I want to pass isInEditMode here.
        <DetailsItem />
      </Provider>,
    );

    screen.debug();
  });
});

问题是,我需要以某种方式模拟商店,以配合我的情况。你知道我该怎么处理吗?

我记得在我之前的项目中,我使用了一个npm包来做这件事,但是现在找不到它,也不记得我是怎么做的,也不记得它叫什么了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-06 11:40:31

您可以为您的测试创建一个帮助函数,以抽象存储/依赖项的设置:

代码语言:javascript
复制
// import dependencies here:

function createTestWithStore(stateFromTest, component) {
  let reducer = { reducerA, reducerB };
  let preloadedState = merge(initialState, stateFromTest);
  let store = configureStore({
    reducer,
    preloadedState
  })
  return <Provider store={store}>{component}</Provider>
}

并在您的测试中使用它:

代码语言:javascript
复制
describe('DetailsItem', () => {
  it('should render DetailsItemDisplay component with a single item', () => {
    let testState = { list: [{ id: 1, name: "John" }] };
    render(createTestWithStore(testState, <DetailsItem />));
    screen.debug();
  });

  it('should render DetailsItemDisplay component no item', () => {
    let testState = { list: [] };
    render(createTestWithStore(testState, <DetailsItem />));
    screen.debug();
  });
});

看看Redux的“编写测试”页面,它是“使用Redux测试应用程序的推荐实践”的一部分:https://redux.js.org/usage/writing-tests#connected-components

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69073775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档