从堆栈跟踪获取文件名
问题描述:
我有一个失败的单元测试,我正在写一个自定义茉莉花记者,这将需要我从它提供的堆栈跟踪中获取文件的名称。从堆栈跟踪获取文件名
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
名的最好方法?
答
如果回溯存储在一个字符串,你要提取使用文件名正则表达式(可能不适合所有类型的异常工作):
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).*\)
答
你也许可以使用这个正则表达式,但如果你想要更多的功能,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
的可能重复[我怎样才能得到一个Javascript堆栈跟踪,当我抛出一个异常?( http://stackoverflow.com/questions/591857/how-can-i-get-a-javascript-stack-trace-when-i-throw-an-exception) –