首页 > 解决方案 > 无法使用 Nightwatchjs 获取 html 报告

问题描述

我想有测试结果的 html 报告所以去试试这个。但是我有一个问题,我已经完成了我的设置,但无法运行它。

在设置之前,我已经完成了fs和的安装path

下面nightwatch.json的文件。

{
  "src_folders" : ["tests"],
  "page_objects_path": "page-objects",
  "globals_path": "./globals.js",
  "output_folder": "reports",

  "webdriver" : {
    "start_process": true,
    "server_path": "node_modules/chromedriver/lib/chromedriver/chromedriver.exe",
    "port": 9515
  },

  "test_settings" : {
    "default" : {
      "desiredCapabilities": {
        "browserName": "chrome",
        "chromeOptions": {
          "args": ["incognito", "start-maximized", "disable-infobars"]
      }
      }
    }
  }
}

我已经完成了链接中提到的所有设置。但得到一个错误:运行它npm test --reporter html-reporter.js

失败:1 个错误(1 毫秒)类型错误:无法在 processTicksAndRejections(内部/进程/task_queues. js:93:5)

在下面的代码中,由于options参数为空而导致的错误。

module.exports = {
  write : function(results, options, done) {

    var reportFilename = options.filename_prefix + (Math.floor(Date.now() / 1000)) + '.html';
    var reportFilePath = path.join(__dirname, options.output_folder, reportFilename);

但我看到它是链接中提到的所有设置

标签: javascriptnightwatch.js

解决方案


试试这个...在同一目录中创建一个 html-reporter.hbs 和 html-reporter.js 文件

从下面复制粘贴下面的代码到 html-reporter.js 中。还要注意使用的路径。它会起作用的。html-reporter.hbs 的代码可以从https://gist.github.com/denji/204690bf21ef65ac7778使用

var fs = require('fs');
var path = require('path');
var handlebars = require('../../node_modules/handlebars');
var json2csv = require('../../node_modules/json2csv');
var _ = require('../../node_modules/lodash');
module.exports = {
  write : function(results, options, done) {
    var date = new Date();
    var dateString = date.getDate()  + "-" + (date.getMonth()+1) + "-" + date.getFullYear();
    var ampm = ((date.getHours()) >= 12) ? "PM" : "AM";
    var timeStamp = dateString + " " + date.getHours() + ":" + date.getMinutes() + " " +ampm;

    var serverUrl = options.globals.server;
    var browser = options.filename_prefix.split('_').join(' ');

    var skippedCount = 0, totalTests = 0, testFailures = 0, totalTime = 0.0;
    var suiteNames = [];
    for (var workflow in results.modules) {
      if ((results.modules).hasOwnProperty(workflow)) {
        totalTests = totalTests + results.modules[workflow].tests;
        testFailures = testFailures + results.modules[workflow].failures;
        totalTime = parseFloat(totalTime)+ parseFloat(results.modules[workflow].time);
        suiteNames.push(results.modules[workflow].group);
        for (var skippedTests in results.modules[workflow].skipped) {
          if ((results.modules[workflow].skipped).hasOwnProperty(skippedTests)) {
            skippedCount = skippedCount + parseInt(skippedTests.length);
          }
        }
      }
    }
    var testsPassed = totalTests - testFailures - skippedCount;
    this.writeToHTML(results, options, timeStamp,browser, serverUrl,totalTests, testsPassed,testFailures,skippedCount,done);

  },

  writeToHTML : function(results, options, timeStamp,browser, serverUrl,totalTests, testsPassed,testFailures,skippedCount,done) {
    
    let datestm = new Date();
    let month = parseInt(datestm.getMonth()) + 1;
    let executionTime = datestm.getDate() + '-' + month + '-' +datestm.getFullYear() +'_'+datestm.getHours()+'-'+datestm.getMinutes()+'-'+datestm.getSeconds();


    var htmlFilename = options.globals.reportFileName +'_'+executionTime+'.html';
    var htmlFilePath = __dirname + '/../../testReports/' + htmlFilename;

    // var htmlFilename = options.globals.reportFileName + '.html';
    // var htmlFilePath = __dirname + '/../../testReports/' + htmlFilename;

    // read the html template
    fs.readFile('./testReports/custom-report/html-reporter.hbs', function (err, data) {
      if (err) throw err;
      var template = data.toString();

      // merge the template with the test results data
      var html = handlebars.compile(template)({
        results: results,
        options: options,
        timestamp: timeStamp,
        browser: browser,
        server: serverUrl,
        totalTests: totalTests,
        testsPassed: testsPassed,
        testsFailed: testFailures,
        testsSkipped: skippedCount,
        totalAssertions: results.tests,
        assertionsPassed: results.passed,
        assertionsFailed: results.failed
      });

      // write the html to a file
      fs.writeFile(htmlFilePath, html, function (err) {
        if (err) throw err;
        console.log('Report generated: ' + htmlFilePath);
        done();
      });
    });
  }
};


推荐阅读