- Get Started
- Product
- Resources
- Tools & SDKs
- Framework
- Reference
- Get Started
- Product
- Resources
- Tools & SDKs
- Framework
- Reference
7.3. Write Tests for Modules
In this chapter, you'll learn about the moduleIntegrationTestRunner
utility function and how to use it to write integration tests for a module's main service.
moduleIntegrationTestRunner Utility#
The moduleIntegrationTestRunner
utility function is provided by the @medusajs/test-utils
package to create integration tests for a module. The integration tests run on a test Medusa application with only the specified module enabled.
For example, assuming you have a hello
module, create a test file at src/modules/hello/__tests__/service.spec.ts
:
1import { moduleIntegrationTestRunner } from "@medusajs/test-utils"2import { HELLO_MODULE } from ".."3import HelloModuleService from "../service"4import MyCustom from "../models/my-custom"5 6moduleIntegrationTestRunner<HelloModuleService>({7 moduleName: HELLO_MODULE,8 moduleModels: [MyCustom],9 resolve: "./src/modules/hello",10 testSuite: ({ service }) => {11 // TODO write tests12 },13})
The moduleIntegrationTestRunner
function accepts as a parameter an object with the following properties:
moduleName
: The name of the module.moduleModels
: An array of models in the module. Refer to this section if your module doesn't have data models.resolve
: The path to the model.testSuite
: A function that defines the tests to run.
The testSuite
function accepts as a parameter an object having the service
property, which is an instance of the module's main service.
The tests in the testSuite
function are written using Jest.
Run Tests#
Run the following command to run your module integration tests:
This runs your Medusa application and runs the tests available in any __tests__
directory under the src/modules
directory.
Pass Module Options#
If your module accepts options, you can set them using the moduleOptions
property of the moduleIntegrationTestRunner
's parameter.
For example:
Write Tests for Modules without Data Models#
If your module doesn't have a data model, pass a dummy model in the moduleModels
property.
For example:
1import { moduleIntegrationTestRunner } from "@medusajs/test-utils"2import HelloModuleService from "../service"3import { model } from "@medusajs/framework/utils"4 5const DummyModel = model.define("dummy_model", {6 id: model.id().primaryKey(),7})8 9moduleIntegrationTestRunner<HelloModuleService>({10 moduleModels: [DummyModel],11 // ...12})
Other Options and Inputs#
Refer to this reference in the Development Resources documentation for other available parameter options and inputs of the testSuite
function.
Database Used in Tests#
The moduleIntegrationTestRunner
function creates a database with a random name before running the tests. Then, it drops that database after all the tests end.
To manage that database, such as changing its name or perform operations on it in your tests, refer to the references in the Development Resources documentation.