...

/

Test a Function Throwing Error

Test a Function Throwing Error

Learn to create a test that captures when a function throws.

Throw

When a function throws as part of its logic, there should be a test case that captures that.

The function

The following function accepts a string text and a number n and returns the first n characters of the string.

function getFirstNChars(text, n) {
  return text.slice(0, n);
}

The implementation uses the slice method out of the string.prototype (click here for details). It slices the passed in text from index 0 to n.

Tests

Since this lesson focuses on testing the error cases (below), first let’s try to implement this test case:

“The firsNChars function should return the first n characters from a string!”

Use src/first-n-chars.spec.js in the code playground below.

This first spec should test the intended use case, also known as the green path.

If stuck, see the hint below the code widget.

const SpecReporter = require('jasmine-spec-reporter').SpecReporter

jasmine.getEnv().clearReporters();

jasmine.getEnv().addReporter(
  new SpecReporter({
    // add jasmine-spec-reporter
    spec: {
      displayPending: false,
    },
  })
)
Testing the intended use case

All right, that takes care of the intended use case. Congratulations on taking the time to write that test!

Incidentally, it might seem painfully obvious and redundant as a piece of code. That’s how a lot of test cases look initially. Their value becomes evident in time.

Corner cases

This implementation works but has a few issues. It doesn’t take into account the cases when:

  • The input text is null or undefined.
  • The input text is a non-string value object, number, and so on.
  • The input n is null or undefined.
  • The input n is a non-numeric value.
  • The input n is a non-positive value.

These are expected conditions that break the function’s expectations. Namely, to slice a string, it needs an actual string and an actual positive ...

Access this course and 1400+ top-rated courses and projects.