摩卡如何使用utils函数stackTraceFilter()

时间:2018-08-15 04:58:52

标签: node.js unit-testing testing mocha stack-trace

我尝试使用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

或者通常,例如,当导入文件中的代码已经失败并创建长堆栈跟踪时,如何获取整个文件的堆栈并初始化整个文件的过滤器功能?

更新(2018.08.15)

所以我以编程方式运行了摩卡咖啡:

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

1 个答案:

答案 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){});