开发者

How to use a different reporter with Vows' run() method?

Vows has a run() method that runs the test under node开发者_开发技巧, without using the vows command.

At https://github.com/cloudhead/vows/blob/master/lib/vows/suite.js we can see that this method takes an option parameter which allows to specify a reporter other than the default:

this.run = function (options, callback) {
    var that = this, start;

    options = options || {};

    for (var k in options) { this.options[k] = options[k] }

    this.matcher  = this.options.matcher  || this.matcher;
    this.reporter = this.options.reporter || this.reporter;

What value is supposed to be passed in the options object to select a different reporter, for instance the spec reporter?


Try:

var spec = require("vows/lib/vows/reporters/spec");
// ...
vows.describe("My Tests").addBatch({ /* some batch */ }).run({reporter:spec});

This was the simplest way that worked for me.


You need an instance of a reporter. Only one of them is public (the dot reporter) as vows.options.reporter

Other then that you can rip out any of the reporters in the vows reporter folder. and include it manually.

The alternatives would be to export the vows suite (.export(module)) and call $ vows --spec or $ vows --json.

vows-is also offers a reporter that's similar to the "spec" reporter.

I guess you could open an issue on vows for making the reporters public.


Actually, the require to reporter is already did at vows/lib/vows/suite.js

    if (options.reporter) {
      try {
        this.reporter = typeof options.reporter === 'string'
            ? require('./reporters/' + options.reporter)
            : options.reporter;
      } catch (e) {
        console.log('Reporter was not found, defaulting to dot-matrix.');
      }
    }

Then, to use it, you should just:

vows.describe('Your suite').addBatch({
    // your batch in here
    }).run({reporter:'spec'}, function(testResults){
        log(testResults);
})
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜