@joystick.js/test

Testing Getters and Setters

How to test API getters and setters in your Joystick app using test.api.get() and test.api.set().

To test your getters and setters, @joystick.js/test includes test.api.get() and test.api.set() methods to call endpoints directly.

Testing a Getter

To test a getter, the test.api.get() method can be utilized:

/tests/api/books/getters.js

import test from '@joystick.js/test';

test.that('the book getter returns a book', async (assert = {}) => {
  const data = await test.api.get('book', {
    input: {
      title: 'Tough and Competent',
    }
  });

  assert.is(data?.author, 'Gene Kranz');
});

The test.api.get() method is analogous to the get() method exported from @joystick.js/ui. To call a getter, we first pass the name of the getter book as the first argument and then, as the second argument, we pass an options object. Here, we've set the input value in our options to get a book with a title of Tough and Competent.

In response, we get the exact output of our getter endpoint. To verify our getter worked, we assert that the author field on the resulting data returned by the book getter matches the author we expect.

Testing a Setter

To test a setter, the test.api.set() method can be utilized:

/tests/api/books/setters.js

import test from '@joystick.js/test';

test.that('the create_book setter creates a book', async (assert = {}) => {
  await test.api.set('create_book', {
    input: {
      title: 'Tough and Competent',
      author: 'Gene Kranz',
    }
  });

  const book = await process.databases.mongodb.collection('books').findOne({
    title: 'Tough and Competent',
    author: 'Gene Kranz',
  });

  assert.is(book?.author, 'Gene Kranz');
});

The test.api.set() method is analogous to the set() method exported from @joystick.js/ui. To call a setter, we first pass the name of the setter create_book as the first argument and then, as the second argument, we pass an options object. Here, we've set the input value in our options with the title and author of a book we'd like to create.

To verify our setter worked, we run a database query to get a book with the title and author we passed and assert that the author field on the resulting data returned by that query matches the author we expect.

Passing a User

For both the test.api.get() and test.api.set() methods, via the options object, a user can be passed along with the request:

/tests/api/books/getters.js

import test from '@joystick.js/test';

test.that('the create_book setter creates a book for the user', async (assert = {}) => {
  const user = await test.accounts.signup({
    email_address: 'example@test.com',
    password: 'password',
    metadata: {
      name: 'Ryan Glover', 
    },
  });

  const data = await test.api.set('create_book', {
    user,
    input: {
      title: 'Tough and Competent',
      author: 'Gene Kranz',
    }
  });

  const book = await process.databases.mongodb.collection('books').findOne({
    title: 'Tough and Competent',
    author: 'Gene Kranz',
  });

  assert.is(book?.owner === user?._id, true);
});

In the example above, we assume that our setter create_book will automatically assign the logged in user's _id as the value of owner on the book we create.

API

test.api.get()

test.api.get(getter_name: string, options: object) => Promise;

Parameters

getter_name string
The name of a getter as a string to call in your API.
options object
The options for the getter request.

test.api.set()

test.api.set(setter_name: string, options: object) => Promise;

Parameters

setter_name string
The name of a setter as a string to call in your API.
options object
The options for the setter request.