我有一个 rootReducer,它像这样导入所有单独的 reducer:
import { combineReducers } from 'redux';
import departments from './departments';
import indicators from './indicators';
import versions from './versions';
import projects from './projects';
// combine all reducers to a single reducer, state will be linked to a reducer via the key used here
const rootReducer = combineReducers({
versions,
departments,
indicators,
projects,
});
export default rootReducer;
由于这个 reducer 导入所有东西很重要,我认为测试 ./src/reducers
中定义的所有 reducer 是否被导入是有意义的。我能想到的唯一方法是使用 fs
检查 ./src/reducers
中的文件数(没有 index
,或者 rootReducer
) 并检查 rootReducer
是否包含那么多的 reducer。
似乎是一个丑陋的测试,也有点脆弱。但是,当您忘记包含 reducer 时,收到测试失败的通知还是很不错的。测试是否所有 reducer 都已导入的最佳方法是什么?
最佳答案
我听说你来自哪里,但我认为你不想在你的测试中处理这个问题。随着应用程序的增长,您可能需要更深的 reducer 树。例如。您的 projects
reducer 可能由多个子 reducer 组成,您必须管理需要从何处导入哪些 reducer。文件系统测试会越来越脆弱。通常,导入和文件结构是项目的实现细节,您希望测试项目的行为。
但是想要在连接 reducer 失败时立即得到反馈是完全有道理的。我会尝试在构建级别处理它。假设你正在使用 Webpack,也许可以查看 this plugin可以解决你的问题。它检测未使用的导出。将其添加到您的插件中
new UnusedFilesWebpackPlugin({ pattern: 'src/reducers/**' })
当您有一个未被导入的文件时,您的构建将警告您。由于它适用于模块,因此您不必担心目录结构(除了确保模式匹配您要检查的所有文件之外)。
关于javascript - 测试rootReducer中是否已经导入了所有reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39642573/