javascript 将jasmine测试结果输出到控制台

a64a0gku  于 2023-05-16  发布在  Java
关注(0)|答案(5)|浏览(140)

我在我的firefox插件中使用Jasmine(JavaScript的BDD测试框架)来测试我的代码的功能。
问题是Jasmine正在将测试结果输出到HTML文件中,我需要的是Firebug控制台或其他解决方案来输出结果。

xesrikrc

xesrikrc1#

你试过ConsoleReporter吗?

jasmine.getEnv().addReporter(new jasmine.ConsoleReporter(console.log));

根据代码,Jasmine有一个ConsoleReporter类,它执行一个打印函数(在本例中为console.log),该函数应该可以完成您需要的操作。
如果其他方法都失败了,你可以用它作为一个起点来实现你自己的console.log报告器。
更新在较新版本的jasmine中,ConsoleReporter被删除。您可以使用内置的jsApiReporter,也可以编写自己的(控制台)报告程序,如以下链接所示:https://jasmine.github.io/tutorials/custom_reporter

tvmytwxo

tvmytwxo2#

在最新的version of Jasmine (2.0)中,如果你想得到测试输出到控制台,你需要添加以下行。

var ConsoleReporter = jasmineRequire.ConsoleReporter();
var options = {
   timer: new jasmine.Timer, 
   print: function () {
      console.log.apply(console,arguments)
}};
consoleReporter = new ConsoleReporter(options); // initialize ConsoleReporter
jasmine.getEnv().addReporter(consoleReporter); //add reporter to execution environment

输出到html是默认包含的,但是如果你根本不想要html输出,你必须编辑你的boot.js文件并删除其中的相关行。如果您想自定义输出在控制台中的显示方式,请编辑文件console.js。来源

mitkmikd

mitkmikd3#

jasmineRequire.ConsoleReporter在2.3.0中不存在,所以我使用了以下代码:

//create a console.log reporter
var MyReporter = function(){jasmineRequire.JsApiReporter.apply(this,arguments);};
MyReporter.prototype = jasmineRequire.JsApiReporter.prototype;
MyReporter.prototype.constructor = MyReporter;
MyReporter.prototype.specDone=function(o){
    o=o||{};
    if(o.status!=="passed"){
      console.warn("Failed:" + o.fullName + o.failedExpectations[0].message);
    }
};
var env = jasmine.getEnv();
env.addReporter(new MyReporter());
6tr1vspr

6tr1vspr4#

为了完整起见,这里是完整的配置:
首先运行npm install命令:

npm install jasmine-console-reporter --save-dev

然后检查您的Jasmine配置,确保您在那里设置了helpers:
spec/support/jasmine.json

{
    "spec_dir": "spec",
    "spec_files": [
        "**/*[sS]pec.js"
    ],
    "helpers": [
        "helpers/**/*.js"
    ],
    "stopSpecOnExpectationFailure": false,
    "random": false
}

由于helper是在specs之前执行的,所以你唯一要做的就是创建一个console reporter helper。
spec/helpers/reporter/consoleReporter.js

const JasmineConsoleReporter = require('jasmine-console-reporter');

let consoleReporter = new JasmineConsoleReporter({
    colors: 1,           // (0|false)|(1|true)|2
    cleanStack: 1,       // (0|false)|(1|true)|2|3
    verbosity: 4,        // (0|false)|1|2|(3|true)|4
    listStyle: 'indent', // "flat"|"indent"
    activity: false
});

jasmine.getEnv().addReporter(consoleReporter);
whitzsjs

whitzsjs5#

我创建了上述答案的摘要解决方案,在不同的茉莉花版本上进行了测试。将其添加到您的boot.js(例如boot1.js):

const env = jasmine.getEnv();
      const jasmineRequire = window.jasmineRequire || require('./jasmine.js');
    
      var ConsoleReporter = window.ConsoleReporter;
      var options = null;
      if (!jasmine.ConsoleReporter || !!jasmineRequire.ConsoleReporter) {  
          if (!jasmineRequire.ConsoleReporter) {
                ConsoleReporter = function(){jasmineRequire.JsApiReporter.apply(this,arguments);};
                ConsoleReporter.prototype = jasmineRequire.JsApiReporter.prototype;
                ConsoleReporter.prototype.constructor = ConsoleReporter;
                ConsoleReporter.prototype.specDone = function (o) {
                    o = o || {};
                    if (o.status !== "passed") {
                      console.warn("Failed: " + o.fullName + o.failedExpectations[0].message);
                    } else {
                      console.debug("Passed: " + o.fullName);
                    }
                };
          } else {  
              ConsoleReporter = jasmineRequire.ConsoleReporter();
              options = {
                  timer: new jasmine.Timer, 
                  print: function () {
                      console.log.apply(console,arguments)
                  }
              };
          }
      } else {
          ConsoleReporter = jasmine.ConsoleReporter;
          options = console.log;
      }
      window.ConsoleReporter = ConsoleReporter;
      
      consoleReporter = new ConsoleReporter(options); // initialize ConsoleReporter
      env.addReporter(consoleReporter); // add reporter to execution environment

相关问题