how can I subscribe to mocha suite events?

2019-03-09 03:58发布

I'd like to be able to extend the mocha test results and listen to them from the available mocha object. First, I'm looking at getting the "passes" results.

It looks like they might be subscribed to from suite but I'm not sure how...

I've tried the following which I thought would listen to the end of all of my tests:

var suite = mocha.suite.suites[0];
suite.on("end", function(e){ console.log(e, "mocha - heard the end of my test suite"); } );

My simple hack which works but isn't elegant at all - sad really:

setTimeout(function(){ 
        var passes = $(".passes").find("em").text();
        console.log("ui - heard the end of my test suite - passes: " + passes); 
    }, 500);

标签: mocha
2条回答
女痞
2楼-- · 2019-03-09 04:37

I did some more digging in mocha.js and finally discovered that mocha.run() actually returns the runner which emits all the events I was looking.

The original example I was using only had: mocha.run()

So if Mocha.run() returns a runner, then I realized that I could subscribe to it:

 var runner = mocha.run();
 var testsPassed = 0;

 var onTestPassedHandler = function(e){
      testsPassed++;
      console.log("onTestPassedHandler - title: " + e.title + " - total:" + testsPassed);

    };

 runner.on("pass", onTestPassedHandler);


    /**
     *  These are all the events you can subscribe to:
     *   - `start`  execution started
     *   - `end`  execution complete
     *   - `suite`  (suite) test suite execution started
     *   - `suite end`  (suite) all tests (and sub-suites) have finished
     *   - `test`  (test) test execution started
     *   - `test end`  (test) test completed
     *   - `hook`  (hook) hook execution started
     *   - `hook end`  (hook) hook complete
     *   - `pass`  (test) test passed
     *   - `fail`  (test, err) test failed
     */ 

much better!

查看更多
唯我独甜
3楼-- · 2019-03-09 04:54

You can also get similar events at

mocha.suite.beforeEach(function() {} )
mocha.suite.afterEach(function() {} )
mocha.suite.afterAll( function() {} )
查看更多
登录 后发表回答