Skip to main content
improved file structure, added language-specific syntax highlighting
Source Link
-force-app/main/default/lwc
└───main
    └───default
        └───lwc
            └───lwcComponentName
   __tests__
             └───__tests__
                    |   lwcComponentName.test.js
                                    data└───data
                                     |   insertedRecordsMock.json
                                     |   insertedRecordsErrorMock.json

{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}
{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}
import insertRecords from '@salesforce/apex/MyController.insertRecords';
import insertRecords from '@salesforce/apex/MyController.insertRecords';
const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");
const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");
jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};
jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};
insertedRecords.mockResolvedValue(mockInsertedRecords);
insertedRecords.mockResolvedValue(mockInsertedRecords);
insertedRecords.mockRejectedValue(mockErrorInsertedRecords);
insertedRecords.mockRejectedValue(mockErrorInsertedRecords);
-force-app/main/default/lwc
                           __tests__
                                    lwcComponentName.test.js
                                    data
                                        insertedRecordsMock.json
                                        insertedRecordsErrorMock.json

{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}
import insertRecords from '@salesforce/apex/MyController.insertRecords';
const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");
jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};
insertedRecords.mockResolvedValue(mockInsertedRecords);
insertedRecords.mockRejectedValue(mockErrorInsertedRecords);
force-app
└───main
    └───default
        └───lwc
            └───lwcComponentName
                └───__tests__
                    |   lwcComponentName.test.js
                    └───data
                        |   insertedRecordsMock.json
                        |   insertedRecordsErrorMock.json

{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}
import insertRecords from '@salesforce/apex/MyController.insertRecords';
const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");
jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};
insertedRecords.mockResolvedValue(mockInsertedRecords);
insertedRecords.mockRejectedValue(mockErrorInsertedRecords);
added 359 characters in body
Source Link
Kris Goncalves
  • 22.8k
  • 8
  • 35
  • 72

For easier readability, you can store as many .json files as needed for all your mocked data needs and have "less" in your jest test.

Within your __tests__ directory, you can create a data folder and then store the .json file of your mocked data within it. File structure would look like so:

-force-app/main/default/lwc
                           __tests__
                                    lwcComponentName.test.js
                                    data
                                        insertedRecordsMock.json
                                        insertedRecordsErrorMock.json 

Your .json file would just be the response you get from your call. This is helpful for responses you want to mock that may be large

{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}

Within a given jest test, you'll have all the imports needed at the top (in this example, your apex method you call imperatively).

import insertRecords from '@salesforce/apex/MyController.insertRecords';

Load as many files in separate constants as you need for all your tests. In this example, we have mock data for a happy path and failure path

const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");

Mock the imperative apex call - we return a new, unused mock function so we can pick what the return will look like within the specific test.

jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};

Then, in your actual specific tests - supply whatever data that should be returned for the mock of your call depending on your testing scenario. Below is the happy path as mockResolvedValue really just mocks the Promise.resolve() which is the happy path of your apex imperative call.

insertedRecords.mockResolvedValue(mockInsertedRecords);

For the failure scenario, you want to mock what happens if your promise is rejected so we can utilize mockRejectedValue()

insertedRecords.mockRejectedValue(mockErrorInsertedRecords);

For easier readability, you can store as many .json files as needed for all your mocked data needs and have "less" in your jest test.

Within your __tests__ directory, you can create a data folder and then store the .json file of your mocked data within it.

-force-app/main/default/lwc
                           __tests__
                                    lwcComponentName.test.js
                                    data
                                        insertedRecordsMock.json
                                        insertedRecordsErrorMock.json

Within a given jest test, you'll have all the imports needed at the top (in this example, your apex method you call imperatively).

import insertRecords from '@salesforce/apex/MyController.insertRecords';

Load as many files in separate constants as you need for all your tests. In this example, we have mock data for a happy path and failure path

const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");

Mock the imperative apex call - we return a new, unused mock function so we can pick what the return will look like within the specific test.

jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};

Then, in your actual specific tests - supply whatever data that should be returned for the mock of your call depending on your testing scenario. Below is the happy path as mockResolvedValue really just mocks the Promise.resolve() which is the happy path of your apex imperative call.

insertedRecords.mockResolvedValue(mockInsertedRecords);

For the failure scenario, you want to mock what happens if your promise is rejected so we can utilize mockRejectedValue()

insertedRecords.mockRejectedValue(mockErrorInsertedRecords);

For easier readability, you can store as many .json files as needed for all your mocked data needs and have "less" in your jest test.

Within your __tests__ directory, you can create a data folder and then store the .json file of your mocked data within it. File structure would look like so:

-force-app/main/default/lwc
                           __tests__
                                    lwcComponentName.test.js
                                    data
                                        insertedRecordsMock.json
                                        insertedRecordsErrorMock.json 

Your .json file would just be the response you get from your call. This is helpful for responses you want to mock that may be large

{
  "apiName": "Account",
  "fields" : {
    "Name": "Local Boxes",
    "BillingState": "WA",
    "BillingStreet" : "123 Main Street",
    "BillingCountry" : "USA"
  }
}

Within a given jest test, you'll have all the imports needed at the top (in this example, your apex method you call imperatively).

import insertRecords from '@salesforce/apex/MyController.insertRecords';

Load as many files in separate constants as you need for all your tests. In this example, we have mock data for a happy path and failure path

const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");

Mock the imperative apex call - we return a new, unused mock function so we can pick what the return will look like within the specific test.

jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};

Then, in your actual specific tests - supply whatever data that should be returned for the mock of your call depending on your testing scenario. Below is the happy path as mockResolvedValue really just mocks the Promise.resolve() which is the happy path of your apex imperative call.

insertedRecords.mockResolvedValue(mockInsertedRecords);

For the failure scenario, you want to mock what happens if your promise is rejected so we can utilize mockRejectedValue()

insertedRecords.mockRejectedValue(mockErrorInsertedRecords);
Source Link
Kris Goncalves
  • 22.8k
  • 8
  • 35
  • 72

For easier readability, you can store as many .json files as needed for all your mocked data needs and have "less" in your jest test.

Within your __tests__ directory, you can create a data folder and then store the .json file of your mocked data within it.

-force-app/main/default/lwc
                           __tests__
                                    lwcComponentName.test.js
                                    data
                                        insertedRecordsMock.json
                                        insertedRecordsErrorMock.json

Within a given jest test, you'll have all the imports needed at the top (in this example, your apex method you call imperatively).

import insertRecords from '@salesforce/apex/MyController.insertRecords';

Load as many files in separate constants as you need for all your tests. In this example, we have mock data for a happy path and failure path

const mockInsertedRecords = require("./data/insertedRecordsMock.json");
const mockErrorInsertedRecords = require("./data/insertedRecordsErrorMock.json");

Mock the imperative apex call - we return a new, unused mock function so we can pick what the return will look like within the specific test.

jest.mock(
    "@salesforce/apex/MyController.insertRecords",
    () => {
        return {
            default: jest.fn(),
        };
    },
    { virtual: true }
};

Then, in your actual specific tests - supply whatever data that should be returned for the mock of your call depending on your testing scenario. Below is the happy path as mockResolvedValue really just mocks the Promise.resolve() which is the happy path of your apex imperative call.

insertedRecords.mockResolvedValue(mockInsertedRecords);

For the failure scenario, you want to mock what happens if your promise is rejected so we can utilize mockRejectedValue()

insertedRecords.mockRejectedValue(mockErrorInsertedRecords);