Skip to content

HOW TO: Count assertions

recyclingben edited this page Nov 25, 2018 · 2 revisions

While Mocha itself does not provide an assertion layer and cannot provide assertion counting, it's relatively easy to integrate this behavior using hooks. The following is a simplified version of an assertion counter:

var expected = 0;
var actual = 0;

function assert(expr, msg) {
  if (!expr) throw new Error(msg || 'assertion failed');
  actual++;
}

function expect(n) {
  expected = n;
}

function reset() {
  expected = 0;
  actual = 0;
}

function check() {
  if (!expected || expected == actual) return;
  var err = new Error('expected ' + expected + ' assertions, got ' + actual);
  this.currentTest.emit('error', err);
}

beforeEach(reset);
afterEach(check);

describe('something', function() {
  it('should work', function(done){
    expect(2);

    setTimeout(function() {
      assert('wahoo')
    }, 50);

    setTimeout(function() {
      assert('hey')
    }, 50);

    setTimeout(function() {
      done();
    }, 100);
  })
})