首页 > 解决方案 > 从外部确定哪些测试用例失败 - Javascript

问题描述

我正在解决一个问题,当该应用程序的测试套件运行时,我需要检测任何 javascript/node.js 应用程序的哪些测试用例失败。我需要以编程方式确定这一点。

Mocha 测试套件输出结果

考虑上面的测试输出示例,对于这个示例,我想编写一个外部 javascript 脚本,它可以告诉我哪个特定测试用例失败了。

目前我认为唯一的解决方案是;在 javascript 子进程中执行npm test并从 stdout 流中读取其输出,解析输出并提取必要的信息,如下所示。

const { spawn } = require('child_process');
const chalk = require('chalk');
const child = spawn('npm.cmd',['test']);

line = 0
child.stdout.on('data', (data) => {
  console.log(`${chalk.bgBlue('line = ' + line)} , data = ${data}`);
  line++;
});

但是,这将是一种非常严格的方法。我想要一种更通用的方法,它可以适用于各种测试模块(不仅仅是 mocha)。

帮助将不胜感激!

标签: javascriptunit-testingtestingmocha.js

解决方案


state执行到代码中后,您可以获得for each 测试。这样你就可以知道测试是否通过了。

您需要的代码非常简单。像这样的东西:

afterEach(function () {
        const state = this.currentTest.state;
        if (state !== "passed") {
            //Do whatever you want with this value
        }
    });

例如,如果您想将测试失败的代码存储到代码中,那么您可以编写以下代码:

var testFailed = []
describe('test', function () {

    afterEach(function () {
        const state = this.currentTest.state;
        if (state !== "passed") {
            testFailed.push(this.currentTest.title)
        }
    });

    after(function(){
        console.log(testFailed)
    })

    it('test1', () => {
        assert.equal(1, 1)

    });
    it('test2', () => {
        assert.equal(1, 2)
    });
})

输出将是:

  test
    √ test1       
    1) test2      
[ 'test2' ]       


  1 passing (15ms)
  1 failing

现在你可以玩这个了。您可以使用该变量来完成您的工作,甚至可以创建一个文件或任何您想要存储信息的东西。


推荐阅读