jest-gas v1.1.2
jest-gas
💨
Adds common Google Apps Script (GAS) globals to the jest runtime as objects that can be easily mocked.
Installation
npm i --save-dev jest-gas
Mocking AppsScript Globals
After initializing the jest environment's global scope with the desired GAS globals (see Initializing Globals below) you can set values and jest mocks against them. For example, let's say you have an apps script file that expects DocumentProperties
to contain a value for the key uid as such:
// appscript.js
// ...
const prop = PropertiesService.getDocumentProperties().getProperty('uid');
// ...
You can mock it in your test script like so:
// appscript.test.js
test('Doc Props Available', ()=>{
const mock = jest.fn(key => key === uid ? '1234567' : undefined);
PropertiesService.getDocumentProperties.getProperty = mock;
});
Note that you didn't need to mock the first function call here. One of the most powerful features of jest-gas
is that you can mock anywhere on the property chain. This is because each get
trap creates an infinite but stateful Proxy chain that ends only when you assign a property a specific value.
Initializing Globals
There are 3 ways to utilize jest-gas
in your jest test. (1) require and call the getGlobals()
method and add the returned Proxy objects to globalThis
manually; (2) require and call setup.js
which will add the desired globals to globalThis
for you; (3) add the setup.js
file to your jest config file as a file in the setupFiles
array.
Call getGlobals()
const { getGlobals } = require('jest-gas');
globals = getGlobals(/** optional filters */);
// your setup code
Call setup.js
require('jest-gas/setup')(/** optional filters */);
Add to jest.config.js
// jest.config.jest
{
// ...
setupFiles: [ './node_modules/jest-gas/setup.js' ]
// ...
}
Available Globals
All available globals are organized in the <root>/lib/
directory.
Filters
Use of filters is recommended to ensure the jest global scope is not polluted with unecessary objects and to keep your test runs fast. See the JSDoc comments for the getGlobals()
method for usage.