Jasmine测试套件总时长获取问题:totalTime与duration无法获取求助
解决Jasmine钩子中无法获取totalTime和duration的问题
我来帮你梳理下这个问题~你遇到的拿不到totalTime和duration的情况,大概率是版本兼容性或者配置细节的问题,下面分点给你分析和解决思路:
1. 首先排查Jasmine版本兼容性
Jasmine的部分钩子属性是在较新的版本中才引入的:
jasmineDone回调里的totalTime是Jasmine 3.6.0及以上版本才新增的属性,如果你的项目用的是更早的版本,自然拿不到这个值。suiteDone的result.duration同样是后期版本才支持的,旧版本的SuiteResult对象里没有这个字段。
你可以先在项目根目录运行命令查看当前版本:
npm list jasmine
如果版本低于3.6,建议升级到最新稳定版:
npm install jasmine@latest --save-dev
2. 检查异步钩子的声明是否必要
你把specDone和jasmineDone声明成了async函数,但里面没有实际的异步操作(没有await语句)。虽然这不会直接导致拿不到属性,但Jasmine处理异步钩子时可能会有潜在的时序问题。如果你的Reporter不需要做异步操作(比如写入数据库这类),建议去掉async关键字,改成同步函数:
function dbReporter() { this.jasmineStarted = function (options) { }; this.specStarted = function (result) { }; this.specDone = function (result) { }; // 移除async this.suiteStarted = function (result) { }; this.suiteDone = function (result) { console.log('duration=', result.duration) } this.jasmineDone = function (result) { console.log('totalTime=', result.totalTime) } // 移除async } module.exports = dbReporter;
3. 确认自定义Reporter是否正确注册
如果上面两步都没问题,那要检查你的dbReporter有没有被Jasmine正确加载:
- 如果用
jasmine.json配置,需要在reporters数组里添加你的Reporter路径:{ "spec_dir": "spec", "spec_files": ["**/*[sS]pec.js"], "helpers": ["helpers/**/*.js"], "reporters": [{"name": "./path/to/your/dbReporter.js"}] } - 如果是代码注册,比如在
spec/support/jasmine.js里手动添加:const dbReporter = require('./path/to/dbReporter'); jasmine.getEnv().addReporter(new dbReporter());
备选方案:用specDone累加总时长
如果暂时不想升级版本,你提到的通过specDone累加单个用例时长的方法是非常可靠的fallback方案,这里给你补个完整示例:
function dbReporter() { let totalTestDuration = 0; this.specDone = function (result) { // 确保单个用例的duration存在再累加 if (result.duration) { totalTestDuration += result.duration; } }; this.jasmineDone = function () { console.log('总测试时长(通过specDone累加):', totalTestDuration); }; } module.exports = dbReporter;
内容的提问来源于stack exchange,提问作者Lynn F
相关产品推荐
相关产品推荐

