Skip to content
On this page

Unit Testing in RPGJS Project ​

Unit testing is an essential part of ensuring the reliability and correctness of your RPGJS project. This guide will walk you through the process of setting up and running unit tests using the vitest testing framework.

Steps ​

Follow these steps to set up and run unit tests for your RPGJS project:

1. Install Dependencies ​

You need to install vitest ,jsdom, canvas and @rpgjs/testing packages. These packages will be used for testing and providing a simulated DOM environment for your tests.

bash
npm install @rpgjs/testing vitest jsdom canvas --save-dev

2. Create a Test Folder ​

Create a __test__ folder within the module where you want to add unit tests. For example, if you want to add tests for the main module, create a __tests__ folder within the main module.

3. Add Test Files ​

Inside the __test__ folder, create .spec.ts files for your unit tests. These files will contain your actual test cases.

4. Write Unit Tests ​

In your .spec.ts file, you can write unit tests using the provided RPGJS testing utilities along with the vitest framework. Here's an example of how you can structure your unit tests:

typescript
import { RpgPlayer, RpgModule, RpgServer } from '@rpgjs/server';
import { testing, clear } from '@rpgjs/testing';
import { beforeEach, afterEach, test, expect } from 'vitest';
import player from '../player';
import { RpgClientEngine } from '@rpgjs/client';

@RpgModule<RpgServer>({
    player
})
class RpgServerModule { }

let currentPlayer: RpgPlayer;
let client: RpgClientEngine

beforeEach(async () => {
    const fixture = await testing([
        {
            server: RpgServerModule
        }
    ]);
    const clientFixture = await fixture.createClient();
    currentPlayer = clientFixture.player;
    client = clientFixture.client;
});

test('test name player', () => {
    expect(currentPlayer).toBeDefined();
    expect(currentPlayer.name).toBe('YourName')
});

afterEach(() => {
    clear();
});
typescript
import { RpgPlayer, type RpgPlayerHooks, Control, Components } from '@rpgjs/server'

const player: RpgPlayerHooks = {
    onConnected(player: RpgPlayer) {
        player.name = 'YourName'
    }
}

export default player

5. Update package.json ​

Add a test script in your package.json to run your unit tests using vitest. This script should reference the vitest configuration file.

json
"scripts": {
    "test": "npx vitest --config node_modules/@rpgjs/compiler/src/test/vitest.config.ts"
}

6. Run Tests ​

To run your unit tests, execute the following command in your terminal:

bash
npm test

This will initiate the unit tests using the vitest framework, and you'll see the test results in your terminal.