Test data actions with mocks
This article describes how to test data actions with mock data.
By mocking data actions in Microsoft Dynamics 365 Commerce, you can replace the output of a data action with the data that is specified in the actionmock.json file that has been loaded. An action mock is useful if you want to test your module without invoking the actual action. You will have to use this approach if you haven't configured your Commerce server (MSDyn365Commerce_BASEURL property) in the .env file. For more information about .env files, see Configure a development environment (.env) file.
Action mock structure
To create a data action mock, create a new file under the /src/module/<MODULE_NAME>/mocks/ directory for your module. The name of the new file should be in the format <MODULE_MOCK_NAME>.actionmock.json, as in the following example.
/src/modules/product-feature/mocks/myModuleMock.actionmock.json
After the file is created, you can simulate the data action return object inside the file by specifying the CacheObjectType and CacheKey values that are defined in the data action. The CacheKey value can be set to "*" to accept any cache key. For more information, see Data actions.
The following example shows how the <MODULE_MOCK_NAME>.actionmock.json file should be structured.
{
"CacheObjectType": "MyCacheObjectType",
"CacheKey": "MyCacheKey",
"Mock": {
"foo": "bar"
}
}
If no CacheKey value is specified, or if "*" is specified, all actions that have the corresponding CacheObjectType value will receive the mock output.
Example
The following example shows a module definition file that uses a data action, and the corresponding data action mock that returns product data.
Example module definition file:
{
"$type": "contentModule",
"friendlyName": "Product Feature",
"name": "product-feature",
"description": "Feature module used to highlight a product.",
"categories": [
"storytelling"
],
"tags": [
""
],
"dataActions": {
"products": {
"path": "@msdyn365-commerce-modules/retail-actions/dist/lib/get-simple-products",
"runOn": "server"
}
},
"config": {
"imageAlignment": {
"friendlyName": "Image Alignment",
"description": "Sets the desired alignment of the image, either left or right on the text.",
"type": "string",
"enum": {
"left": "Left",
"right": "Right"
},
"default": "left",
"scope": "module",
"group": "Layout Properties"
}
},
"resources": {
"resourceKey": {
"comment": "resource description",
"value": "resource value"
}
}
}
Example module mock file:
[
{
"CacheObjectType": "SimpleProduct",
"CacheKey": "*",
"Mock": {
"RecordId": 22565423455,
"ItemId": "2101",
"Name": "Retro Horn-Rimmed Keyhole Sunglasses",
"Description": "High-quality with the perfect blend of timeless classic and modern technology with hint of old school glamor.",
"ProductTypeValue": 3,
"DefaultUnitOfMeasure": "Ea",
"BasePrice": 15,
"Price": 15,
"AdjustedPrice": 14,
"MasterProductId": null,
"Components": null,
"Dimensions": null,
"Behavior": null,
"LinkedProducts": null,
"PrimaryImageUrl": "https://bit.ly/33cMGxr",
"ExtensionProperties": null
}
}
]
Note
The CacheObjectType and CacheKey values should match the values in the data action that you're mocking. If no CacheKey value is specified, all actions that have the corresponding CacheObjectType value receive the mock output.
Use an action mock in a preview
To use an action mock in your module preview, include the query string parameter for the action mock actionMock=MODULE_NAME:MOCK_FILE_NAME, as shown in the following example.
https://localhost:4000/modules?type=product-feature&actionMock=product-feature:myModuleMock
Here is the syntax of the query string parameter.
{module-name}:{action-mock-file-name}
If no action mock file name is specified, the package name is used to search for the mock.