跳到主要内容

在测试之间重置状态

运行测试时,在每次测试运行之前不会自动重置stores。 因此,在某些情况下,一个测试的状态可能会影响另一个测试。要确保所有测试都以原始store状态运行,你可以在测试期间模拟zustand,并将其替换为以下代码:

import actualCreate from 'zustand';
import { act } from 'react-dom/test-utils';

// a variable to hold reset functions for all stores declared in the app
const storeResetFns = new Set();

// when creating a store, we get its initial state, create a reset function and add it in the set
const create = createState => {
const store = actualCreate(createState);
const initialState = store.getState();
storeResetFns.add(() => store.setState(initialState, true));
return store;
};

// Reset all stores after each test run
afterEach(() => {
act(() => storeResetFns.forEach((resetFn) => resetFn()));
});

export default create;

你可以mock一个依赖的方式取决于你的测试运行器。 在 jest中,你可以创建一个 _ mocks _ /zustand.js 并将代码放在那里。如果你的应用使用 zustand/vanilla 而不是 zustand,那么你必须将上述代码放在 _ mocks _ /zustand/vanilla.js