This is a collection of Google Apps Script services polyfills which can be used to mock Apps Script globals in your tests.
npm install --save-dev gas-mock-globals
Add import statement to the top of your script to load polyfills into global scope:
import 'gas-mock-globals' // es-modules
require('gas-mock-globals') // common-js
Or use exact class without global namespace pollution:
import CardService from 'gas-mock-globals/src/card/CardService'
import Utilities from 'gas-mock-globals/src/utilities/Utilities'
const cardSection = CardService.newCardSection();
// Finish building the card section ...
const header = CardService.newCardHeader().setTitle(Utilities.base64Encode('Card title'))
const card = CardService.newCardBuilder()
.setName('Card name')
.setHeader(header)
.addSection(cardSection)
.build();
And then you can use any JS testing framework to test your code intended to run on Apps Script environment:
// apps-script-code-module.js
function dummyFunction () {
PropertiesService.getUserProperties().setProperty('DAYS_TO_FETCH', '5');
Logger.log('Current user\'s email', Session.getActiveUser().getEmail())
Logger.log('Encoded value', Utilities.base64Encode('john doe'))
return 'i\'m dummy'
}
// test
test('dummy test', () => {
expect(dummyFunction()).toEqual('i\'m dummy')
})
Test UrlFetchApp:
function getUser (id) {
return UrlFetchApp.fetch(`https://backend-url/user/${id}`)
}
// test
test('Test API Request to Get User', () => {
const id = 348
const email = '[email protected]'
UrlFetchAppStubConfiguration.when(`https://backend-url/user/${id}`)
.return(new HttpResponse().setContentText({ id, email }))
const response = getUser(id)
expect(response.getResponseCode()).toBe(200)
expect(response.getContentText()).toBe({ id, email })
})
See more examples in examples directory.
To contribute you should make sure that:
- you've covered your code with tests
- all the tests pass if you run
npm test