bootstrap.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // Run babel on tests to allow support for import/export statements in Node
  2. require('@babel/register')
  3. // Load JSDOM to mock the DOM in Node
  4. // Set pretendToBeVisual to enable requestAnimationFrame
  5. require('jsdom-global')(undefined, { pretendToBeVisual: true })
  6. const path = require('path')
  7. process.env.SHARELATEX_CONFIG = path.resolve(
  8. __dirname,
  9. '../../config/settings.webpack.coffee'
  10. )
  11. // Load sinon-chai assertions so expect(stubFn).to.have.been.calledWith('abc')
  12. // has a nicer failure messages
  13. const chai = require('chai')
  14. chai.use(require('sinon-chai'))
  15. chai.use(require('chai-as-promised'))
  16. window.i18n = { currentLangCode: 'en' }
  17. require('../../frontend/js/i18n')
  18. const moment = require('moment')
  19. moment.updateLocale('en', {
  20. calendar: {
  21. lastDay: '[Yesterday]',
  22. sameDay: '[Today]',
  23. nextDay: '[Tomorrow]',
  24. lastWeek: 'ddd, Do MMM YY',
  25. nextWeek: 'ddd, Do MMM YY',
  26. sameElse: 'ddd, Do MMM YY'
  27. }
  28. })
  29. let inMemoryLocalStorage = {}
  30. Object.defineProperty(global, 'localStorage', {
  31. value: {
  32. // localStorage returns `null` when the item does not exist
  33. getItem: key =>
  34. inMemoryLocalStorage[key] !== undefined
  35. ? inMemoryLocalStorage[key]
  36. : null,
  37. setItem: (key, value) => (inMemoryLocalStorage[key] = value),
  38. clear: () => (inMemoryLocalStorage = {}),
  39. removeItem: key => delete inMemoryLocalStorage[key]
  40. },
  41. writable: true
  42. })
  43. // node-fetch doesn't accept relative URL's: https://github.com/node-fetch/node-fetch/blob/master/docs/v2-LIMITS.md#known-differences
  44. const fetch = require('node-fetch')
  45. global.fetch = (url, ...options) => fetch('http://localhost' + url, ...options)
  46. // Mock global settings
  47. window.ExposedSettings = {
  48. appName: 'Overleaf',
  49. maxEntitiesPerProject: 10,
  50. maxUploadSize: 5 * 1024 * 1024
  51. }
  52. // ignore CSS files
  53. const { addHook } = require('pirates')
  54. addHook(() => '', { exts: ['.css'], ignoreNodeModules: false })