JavaScript JavaScript Unit Testing Improving Our Tests Catching an Error

Santiago Cabrera
Santiago Cabrera
11,087 Points

Don't understand why it doesn't work

Nothing

subtraction_spec.js
var expect = require('chai').expect

describe('subtraction', function () {
  var subtraction = require('../WHEREVER')  
  it('only works with numbers', function () {
    // YOUR CODE HERE
    expect(subtraction.subtraction()).to.throw(Error);
  })
})
subtraction.js
function subtraction (number1, number2) {
  if (typeof number1 !== 'number' || typeof number2 !== 'number') {
    throw Error('subtraction only works with numbers!')
  }
  return number1 - number2
}

1 Answer

Tim Gavlick
Tim Gavlick
11,725 Points

2 things:

  1. We apparently don't need to call "subtraction.subtraction()". "subtraction()" works just fine.

  2. expect, in this case, is looking for a callable function and not the result of calling the function.

expect(subtraction('a', 'b'))

won't give Chai the chance to catch the exception, but giving it a callable function will. This can be done via the wrapper method in the previous video, or by passing a bound or anonymous function into expect; e.g.

expect(subtraction.bind(null, 'a', 'b'))