【问题标题】:get filename from a stacktrace从堆栈跟踪中获取文件名
【发布时间】:2016-09-14 18:57:35
【问题描述】:

我有一个失败的单元测试,我正在编写一个自定义的 jasmine 报告器,这需要我从它提供的堆栈跟踪中获取文件的名称。

Verify the most recent consumer review is showing all information. (0.683 sec) - Expected true to be false, 'test title'. at Object.<anonymous> (/Users/xyz/Documents/tests/somefolder/xyz.test.js:25:72) at /Users/xyz/Documents/node_modules/jasminewd2/index.js:96:23 at new Promise (/Users/xyz/Documentsc/node_modules/selenium-webdriver/lib/promise.js:1043:7.....

从上面获取文件名xyz.test.js 的最佳方法是什么?

【问题讨论】:

标签: javascript node.js unit-testing filenames


【解决方案1】:

如果回溯存储在字符串中,并且您想使用正则表达式提取文件名(可能不适用于所有类型的异常):

var traceback = "Verify the most recent consumer review is showing all information. (0.683 sec) \
        - Expected true to be false, 'test title'. \
            at Object.<anonymous> (/Users/xyz/Documents/tests/somefolder/xyz.test.js:25:72) \
            at /Users/xyz/Documents/node_modules/jasminewd2/index.js:96:23 \
            at new Promise (/Users/xyz/Documentsc/node_modules/selenium-webdriver/lib/promise.js:1043:7....."
            
console.log(/\(.*\/([^\/]*.js).*\)/.exec(traceback)[1])
\(.*/([^/]*.js).*\)

Debuggex Demo

【讨论】:

    【解决方案2】:

    您可以为此使用正则表达式,但如果您想要更多功能,stacktrace-parser 很有用:

    const parse = require('stacktrace-parser').parse;
    const path  = require('path');
    
    let trace = `
            - Expected true to be false, 'test title'.
                at Object.<anonymous> (/Users/xyz/Documents/tests/somefolder/xyz.test.js:25:72)
                at /Users/xyz/Documents/node_modules/jasminewd2/index.js:96:23
                at new Promise (/Users/xyz/Documentsc/node_modules/selenium-webdriver/lib/promise.js:1043:7
    `;
    
    console.log( path.basename( parse(trace)[0].file ) )
    // outputs: xyz.test.js
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2016-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      相关资源
      最近更新 更多