无需eject的Create React App中用tape测试Redux-Saga可行吗?
在不eject的Create React App中用tape测试Redux-Saga:可行!附问题解决办法
别担心,完全可以在不执行eject操作的Create React App(CRA)项目里用tape测试Redux-Saga!你注意到jest-cli识别了TAP version 13是对的——CRA默认用jest,但它兼容输出TAP格式的测试工具,tape正好符合这个要求,所以你的思路没问题,只是现在卡在了测试用例的基础问题上。
你遇到的Your test suite must contain at least one test错误,核心原因很简单:你的src/tests/sagas/parserSaga.test.js里没有定义任何有效的测试用例,jest(或者说tape本身)找不到可执行的测试逻辑,才会抛出这个报错。
下面给你一套完整的解决步骤,帮你快速跑通测试:
1. 安装必要依赖
首先确保你装好了tape和redux-saga的测试工具:
npm install tape redux-saga-test-plan tap-spec --save-dev
redux-saga-test-plan是专门用来测试redux-saga的工具,能帮你轻松模拟saga的执行流程tap-spec用来美化tape输出的TAP格式报告,看起来更清晰
2. 写一个有效的tape测试用例
修改你的parserSaga.test.js,加入实际的测试逻辑,比如测试saga的正常执行和错误处理:
const test = require('tape'); const { call, put } = require('redux-saga/effects'); const { testSaga } = require('redux-saga-test-plan'); // 导入你要测试的saga和对应的action const { parserSaga } = require('../../sagas/parserSaga'); const { parseSuccess, parseFailure } = require('../../actions/parserActions'); test('parserSaga 解析成功时触发正确的成功action', (t) => { const mockPayload = { data: '解析后的数据' }; // 模拟saga里调用的解析函数 const mockParseFn = () => mockPayload; testSaga(parserSaga) .next() // 启动saga .call(mockParseFn) // 验证调用了解析函数 .next(mockPayload) // 模拟解析函数返回结果 .put(parseSuccess(mockPayload)) // 验证触发了成功action .next() .isDone(); // 验证saga执行完成 t.pass('解析成功的流程完全符合预期'); t.end(); // 结束这个测试用例 }); test('parserSaga 解析失败时触发正确的错误action', (t) => { const mockError = new Error('解析出错了'); const mockParseFn = () => { throw mockError }; testSaga(parserSaga) .next() .call(mockParseFn) .throw(mockError) // 模拟解析函数抛出错误 .put(parseFailure(mockError.message)) // 验证触发了错误action .next() .isDone(); t.pass('解析失败的错误处理流程符合预期'); t.end(); });
3. 配置测试脚本
在项目的package.json里添加专门的tape测试脚本:
{ "scripts": { "test": "react-scripts test", // 保留原来的jest测试脚本 "test:tape": "tape src/tests/**/*.test.js | tap-spec" // 新增tape测试脚本 } }
之后运行npm run test:tape就能执行你的tape测试,看到美化后的测试报告了。
如果你还是想用jest来跑tape测试(就是你之前尝试的方式),只要确保每个测试用例都调用了t.end(),jest就能正确识别tape的测试用例,不会再报“没有测试”的错误。
内容的提问来源于stack exchange,提问作者dougajmcdonald
相关产品推荐
相关产品推荐

