# Writing Unit Tests for Magnolia CMS JavaScript Models with Jest

# Introduction

Magnolia JavaScript models (opens new window) allow you to write custom Magnolia functionality without the hassle and weight of a Java Maven module. This guide will teach you how write unit tests for JavaScript models with the Jest (opens new window) testing framework.

See magnolia-cms-javascript-model-unit-test-demo (opens new window) for a fully functional Yarn project based on this guide.

# Prerequisites

  1. You've created a Magnolia JavaScript model
  2. You have experience with the Yarn (opens new window) or NPM (opens new window) package managers
  3. You have experience with Jest and have it installed in your project

# Step 1—Installing babel-plugin-rewire

In order to write tests for Magnolia JavaScript models, install and setup the babel-plugin-rewire (opens new window) plugin. Otherwise, you'll encounter the following error.

TypeError: Model is not a constructor

This is because Jest can't access Magnolia JavaScript model private variables by default. See How to run Jest tests with Rewire plugin (opens new window) for more info.

# Step 2—Writing the Test

We'll write a test for the follow example model.

var Model = function() {
  this.feedCows = function() {
    return 'Cows have been fed';
  }
};

new Model();

To write a test, use the __get__ method babel-plugin-rewire provides.

describe('feedCows', () => {
  it('should return reduced list', () => {
    const Model = require('model.js').__get__('Model');
    const model = new Model();

    expect(model.feedCows()).toEqual('Cows have been fed');
  });
});

Now you can access all the fields on the model's main object and test as you please.