1
0
Fork 0
mirror of https://github.com/overleaf/overleaf.git synced 2024-12-14 11:20:54 -05:00
overleaf/services/web/test/unit/bootstrap.js
Eric Mc Sween bbe4137d81 Merge pull request from overleaf/em-unit-tests-leaks
Fix memory leaks in unit tests

GitOrigin-RevId: e2b366dd9f277823db4c7c00c209da2b3774a0fe
2021-02-04 03:04:49 +00:00

68 lines
2 KiB
JavaScript

const chai = require('chai')
const sinon = require('sinon')
// add chai.should()
chai.should()
// Load sinon-chai assertions so expect(stubFn).to.have.been.calledWith('abc')
// has a nicer failure messages
chai.use(require('sinon-chai'))
// Load promise support for chai
chai.use(require('chai-as-promised'))
// Do not truncate assertion errors
chai.config.truncateThreshold = 0
// add support for mongoose in sinon
require('sinon-mongoose')
afterEach(function() {
sinon.restore()
})
const SandboxedModule = require('sandboxed-module')
const PromisesUtils = require('../../app/src/util/promises')
const Errors = require('../../app/src/Features/Errors/Errors')
const GLOBAL_REQUIRE_CACHE_FOR_SANDBOXED_MODULES = {
// cache p-limit for all expressify/promisifyAll users
'../../util/promises': PromisesUtils,
'../../../../app/src/util/promises': PromisesUtils,
// Errors are widely used and instance checks need the exact same prototypes
'../Errors/Errors': Errors,
'../../../../app/src/Features/Errors/Errors': Errors,
'../../../../../app/src/Features/Errors/Errors': Errors
}
const LIBRARIES = [
'@overleaf/o-error',
'async',
'lodash',
'moment',
'underscore',
'xml2js',
'json2csv',
'sanitize-html',
'marked'
]
LIBRARIES.forEach(lib => {
GLOBAL_REQUIRE_CACHE_FOR_SANDBOXED_MODULES[lib] = require(lib)
})
SandboxedModule.configure({
requires: GLOBAL_REQUIRE_CACHE_FOR_SANDBOXED_MODULES
})
// sandboxed-module somehow registers every fake module it creates in this
// module's children array, which uses quite a big amount of memory. We'll take
// a copy of the module children array and restore it after each test so that
// the garbage collector has a chance to reclaim the fake modules.
let initialModuleChildren
before('record initial module children', function() {
initialModuleChildren = module.children.slice()
})
afterEach('restore module children', function() {
// Delete leaking sandboxed modules
module.children = initialModuleChildren.slice()
})