首页 > 解决方案 > 每次测试后用玩笑重置 Redux 存储

问题描述

我正在使用 Jest 来测试我的 Redux 操作,有时会发生测试与其他测试所做的冲突。例如,我测试了一个名为add a user的操作,因此它将商店的长度增加到 1,然后我测试了另一个名为add and delete a user 的操作,它希望商店在处理后为空,但商店仍然有一个自第一次测试以来就存在的用户。

每次测试后是否有一种可接受的方式来重置 Redux 存储以重新开始?

标签: testingreduxjestjsspecifications

解决方案


我的建议是为每个测试创建一个新的 Redux 存储——而不是重置它。这样,您的中间件等也以干净的状态开始。

您可以在 Redux Toolkit Tests 中使用setupApiStore帮助程序之类的东西。

简化版本看起来像

function setupTestStore() {
  const refObj = {}
  
  beforeEach(() => {
    const store = configureStore({ reducer })
    refObj.store = store
    refObj.Wrapper = function Wrapper({ children }: any) {
      return <Provider store={store}>{children}</Provider>
    }
  })

  return refObj
}

在你的测试中

const storeRef = setupTestStore()

it('tests something', () => {
  render(<MyComponent />, { wrapper: storeRef.wrapper }
}


it('tests something with another store', () => {
  render(<MyComponent2 />, { wrapper: storeRef.wrapper }
}

推荐阅读