DEV Community

Matt Williams for Tech Dev Blog

Posted on • Originally published at techdevblog.io on

Get Your Chai Fix and Learn the Art of Assertions at the Same Time

Get Your Chai Fix and Learn the Art of Assertions at the Same Time

Hey there! Are you tired of writing tedious and repetitive test cases for your JavaScript code? Look no further, because Chai is here to save the day!

Chai is a popular assertion library for Node.js and the browser that makes it easy to write powerful and elegant test cases. It provides a range of functions that allow you to make a variety of assertions about your code, from simple true/false statements to more complex comparisons.

In this tutorial, we'll go over the basics of using Chai to write test cases for your JavaScript code. By the end, you'll be a Chai pro and your test suite will be running smoothly in no time!

Setting up Chai

Before we dive into writing test cases with Chai, let's first make sure it's set up in your project.

If you're using Node.js, you can install Chai using npm:

npm install --save-dev chai

Enter fullscreen mode Exit fullscreen mode

If you're using a browser, you can include Chai in your HTML file using a script tag:

<script src="https://unpkg.com/chai/chai.js"></script>
Enter fullscreen mode Exit fullscreen mode

Note: Chai is an assertion library. To run the actual tests, it is better to pair Chai with a testing framework, such as Jasmine or Mocha.

Writing test cases with Chai

Now that we have Chai set up, let's start writing some test cases!

First, let's look at the different types of assertions Chai provides. Chai has three different assertion styles:

  • assert : This is the classic, traditional way of making assertions. It's similar to the built-in assert module in node.js.
  • expect : This is a more natural language-style of making assertions. It's easier to read and write, and it's the most popular way of using Chai.
  • should : This is a BDD (Behavior Driven Development) style of making assertions. It's similar to the expect style, but with a slightly different syntax.

We'll be using the expect style in this tutorial, as it's the most widely used and the syntax your are most likely to encounter.

Making simple assertions

Let's start by writing a simple test case to make sure a function returns the correct output.

Here's our function:

function add(a, b) {
  return a + b;
}

Enter fullscreen mode Exit fullscreen mode

And here's our test case:

it('should add two numbers', function() {
  expect(add(2, 3)).to.equal(5);
});

Enter fullscreen mode Exit fullscreen mode

In this test case, we're using the expect function to pass the output of the add function to Chai. Then, we're using the to.equal function to make an assertion that the output is equal to 5.

If the assertion is true, the test case will pass. If it's false, the test case will fail.

Asserting the type of a variable

Sometimes, you might want to make sure that a variable is of a certain type. Chai provides the to.be.a function for this.

Here's an example:

it('should be a string', function() {
  expect(myVariable).to.be.a('string');
});

Enter fullscreen mode Exit fullscreen mode

In this test case, we're using the to.be.a function to assert that myVariable is a string.

Asserting the length of an array or string

You can also use Chai to assert the length of an array or string.

Here's an example:

const myArray = [0, 1, 2];

it('should have the correct length', function() {
  expect(myArray).to.have.lengthOf(3);
});

Enter fullscreen mode Exit fullscreen mode

In this test case, we're using the to.have.lengthOf function to assert that myArray has a length of 3.

Asserting the presence or absence of properties

You can use Chai to assert the presence or absence of properties on an object.

Here's an example of asserting the presence of a property:

const myObject = { 'name': 'some name' };

it('should have the correct property', function() {
  expect(myObject).to.have.property('name');
});

Enter fullscreen mode Exit fullscreen mode

And here's an example of asserting the absence of a property:

const myObject = { 'name': 'some name' };

it('should not have the incorrect property', function() {
  expect(myObject).to.not.have.property('age');
});

Enter fullscreen mode Exit fullscreen mode

Making complex assertions

Sometimes, you might want to make more complex assertions about your code. Chai provides a variety of functions that allow you to do this.

For example, let's say we want to make sure that a variable is an array and contains a specific set of values. Here's how we could do that:

const myArray = [-2, 0, 1, 2, 3, 4, 5];

it('should have the correct values', function() {
  expect(myArray).to.be.an('array').that.includes(1, 2, 3);
});

Enter fullscreen mode Exit fullscreen mode

In this test case, we're using the to.be.an function to assert that myArray is an array, and the that.includes function to assert that it contains the values 1, 2, and 3.

In these test cases, we're using the to.have.property and to.not.have.property functions to assert the presence or absence of the name and age properties on myObject.

Asserting the throw of an error

Sometimes, you might want to make sure that a function throws an error under certain conditions. Chai provides the to.throw function for this.

Here's an example:

it('should throw an error', function() {
  expect(myFunction).to.throw();
});

Enter fullscreen mode Exit fullscreen mode

In this test case, we're using the to.throw function to assert that myFunction throws an error.

Wrapping up

And that's it! You now know the basics of using Chai to write test cases for your JavaScript code. With these tools in your arsenal, you'll be able to write powerful and elegant test suites in no time.

Happy testing!

Top comments (0)