NodeJS 如何触发cypress after:在测试完成执行后运行

4szc88ey  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(150)

我使用cypress + multiple-cucumber-html-report在执行后生成一个报告。可以向报告中添加自定义数据,如执行开始和结束时间。
我假设这些信息作为结果 meta数据的一部分来自Cypress。
我尝试在运行完成后将结果放入json文件中,方法是将其添加到cypress配置文件中:

import { defineConfig } from 'cypress';
import * as fs from 'fs';

async function setupNodeEvents(on, config) {

  on('after:run', async (results) => {
    if (results) {
      fs.mkdirSync("cypress/.run", { recursive: true });
      fs.writeFile("cypress/.run/results.json", JSON.stringify(results), (err) => {
        if (err)
          console.log(err);
        else {
          console.log("Successful results has been written");
        }
      });
    }
  })

  return config;
}

export default defineConfig({
  e2e: {
    setupNodeEvents,
    experimentalInteractiveRunEvents: true
  },
});

然后在报告生成文件中读取这些结果:

const report = require('multiple-cucumber-html-reporter');
const fs = require('fs');

fs.readFile('cypress/.run/results.json', function read(err, data) {
    if (err) {
        throw err;
    }
    var runInfos = JSON.parse(data);
    report.generate({
        jsonDir: './cypress/result/',
        reportPath: './cypress/report/',
        metadata:{
            browser: {
                name: runInfos.browserName,
                version: runInfos.browserVersion
            },
            device: 'Cypress',
            platform: {
                name: mapOs(runInfos.osName)
            }
        },
        customData: {
            title: 'Run info',
            data: [
                {label: 'Project', value: 'project'},
                {label: 'Execution Start Time', value: new Date(runInfos.startedTestsAt).toLocaleString()},
                {label: 'Execution End Time', value: new Date(runInfos.endedTestsAt).toLocaleString()}
            ]
        }
    });
});

不幸的是,after:run从未被触发,甚至没有抛出错误。

lmyy7pcs

lmyy7pcs1#

查看After Run API的文档
通过cypress open运行时,仅当启用experimentalInteractiveRunEvents标志时,才会触发after:run事件。
不幸的是,从配置示例的外观来看,您必须使用较旧版本的Cypress(v10之前)。
要使其更有用,请升级Cypress并使用上面提到的标志,如下所示:

// cypress.config.js

const { defineConfig } = require('cypress')

module.exports = defineConfig({
  // setupNodeEvents can be defined in either
  // the e2e or component configuration
  e2e: {
    setupNodeEvents(on, config) {
      on('after:run', (results) => {
        /* ... */
      })
    },
    experimentalInteractiveRunEvents: true,   // here is the flag, not documented in the configuration page
  },
})

相关问题