【发布时间】:2025-12-17 07:55:02
【问题描述】:
首先,如果这里不适合提出这个问题或将其移至正确的地方,请告诉我。
我开始为一些 React 组件编写单元测试。其中一个没有任何道具但依赖于store:
const PlayerSelector = () => {
const classes = useStyles();
const divRef = useRef(null);
const [{ playerList }, dispatch] = useStore();
...
userStore() 来自哪里:
export const StateContext = createContext(null);
export const StoreProvider = ({ initialState, reducer, children }) => (
<StateContext.Provider
value={useReducer(reducer, initialState)}
>
{children}
</StateContext.Provider>
);
export const useStore = () => useContext(StateContext);
我的问题是,当我尝试在测试文件中renderPlayerSelector 时,我遇到了一个错误,因为测试无权访问该存储:
it('loads component', () => {
const { queryByRole } = render(<PlayerSelector />);
expect(queryByRole('button')).toHaveAttribute('aria-label');
});
结果是TypeError: object null is not iterable (cannot read property Symbol(Symbol.iterator))指向这一行:
const [{ firmList }, dispatch] = useStore();
在谷歌上搜索了很多之后,我发现了一些有用的资源,这些资源说明了如何模拟上下文 - 但不是如何为 reducer 做同样的事情。我不知道我是否使事情过于复杂,可能应该找到另一种测试方法,或者我是否错过了一个明显的答案。无论如何,如果您能分享任何提示或指导,我将不胜感激。
【问题讨论】:
标签: reactjs unit-testing jestjs react-testing-library