我尝试使用mocha utils stackTraceFilter()函数
但是我找不到一个示例使用案例,其中有人解释了如何在一次测试中使用它。我在这里找到了官方测试:link
但是我该如何在我的测试中实现它?
import { expect } from 'chai'
import 'mocha'
import { main, main2 } from './'
describe.only('index.ts', async () => {
it('should start a job', async () => {
// const R_RUN_MAIN = await main()
await main2()
// TEST
expect(1).to.equal(1) // fails
})
})
在测试中,我可以看到该行
expect(filter(stack.join('\n')), 'to be', stack.slice(0, 3).join('\n'));
但是我如何获得测试堆栈?
expect(1).to.equal(1) // fails
或者通常,例如,当导入文件中的代码已经失败并创建长堆栈跟踪时,如何获取整个文件的堆栈并初始化整个文件的过滤器功能?
所以我以编程方式运行了摩卡咖啡:
export {}
import * as MOCHA from 'mocha'
async function run() {
const mocha = new MOCHA({
reporter: 'progress',
reporterOptions: {
verbose: true,
},
})
mocha.addFile(`./src/utils/mocha/index.spec.ts`)
const R = mocha.run((failures) => {
process.on('exit', () => {
process.exit(failures)
})
})
}
run()
我不知道在哪里添加和运行过滤器功能?
const filter = MOCHA.utils.stackTraceFilter
答案 0 :(得分:0)
mocha中的stackTraceFilter()
函数并不是要过滤您的代码,而是在理论上不应该与您的测试相关的mocha内部。您可以查看source code,但总而言之,它只是根据您所处的环境从堆栈中过滤掉“ mocha”和“ node”行。
我认为您正在寻找的东西可以通过软件包StackTraceJS来完成,该软件包可以让您从任何地方抓取堆栈,并随心所欲地进行操作。我们创建了一个自定义reporter来使用它的摩卡咖啡,并且效果很好。
因此,使用他们网站上的示例:
StackTrace.get()
.then(function(stack){
// you now have a stack, and can filter as you wish
})
.catch(function(err){});