【问题标题】:Output jasmine test results to the console将茉莉花测试结果输出到控制台
【发布时间】:2011-11-01 17:56:43
【问题描述】:


我在我的 firefox 插件中使用 Jasmine(JavaScript 的 BDD 测试框架)来测试我的代码的功能。

问题是 jasmine 正在将测试结果输出到 HTML 文件,我需要的是 Firebug 控制台或其他解决方案来输出结果。

【问题讨论】:

    标签: javascript firefox-addon javascript-framework jasmine


    【解决方案1】:

    您是否尝试过 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

    【讨论】:

    • 你为 iPhone 实现了 Jasmine 吗?如果是,ConsoleReporter 是否适用于在 iPhone 的控制台中获取输出??
    • 它有效,但请注意您使用的是哪个版本的 Jasmine。提供的 ConsoleReporter github 链接指向 ConsoleReporter.js 的主分支版本,它使用不同的报告器 API 作为当前 (1.3.1) 的 Jasmine 官方版本(例如 jasmineStarted 或 jasmineDone 而不是 reportRunnerStarting 等)。如果它不适合您,您可能需要选择 v1.3.1 标签(或使用this 链接)。
    【解决方案2】:

    在最新的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。 Source

    【讨论】:

    • 通过 Guard 运行 Jasmine(使用 PhantomJS)我尝试将上述内容添加到我的测试的 describe 块中,但得到“找不到变量:jasmineRequire”
    • @DaveSag 将其添加到boot.js
    【解决方案3】:

    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());
    

    【讨论】:

    • 在 Jasmine 2.8.0 下为我工作 :) 在创建 jsApiReporter 之后,我将其添加到 boot.js。我删除了 var env=... 行,因为 env 已经存在。您是否愿意添加一些解释以帮助我更好地理解JsApiReporterMyReporter 之间的交互?
    【解决方案4】:

    为了完整起见,这里是完整的配置:

    首先运行npm install命令:

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

    然后检查您的 Jasmine 配置以确保您在那里设置了助手:

    spec/support/jasmine.json

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

    由于助手是在规范之前执行的,因此您唯一需要做的就是创建一个控制台报告助手。

    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);
    

    【讨论】:

    • jasmine 的复杂程度太荒谬了。为什么不在jasmine.json 中添加"color": "true" 选项?就像在mocha 中一样,只需在配置文件中输入--color
    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多