0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-02-03 23:00:14 -05:00

Tests: Do not re-register model events in settings cache

no issue

> (node:63849) Warning: Possible EventEmitter memory leak detected. 101 settings.edited listeners added. Use emitter.setMaxListeners() to increase limit

- the settings cache was initialised per test
- it registered the model events over and over again
- add a simple shutdown function, which can be called from the test env
This commit is contained in:
kirrg001 2017-12-14 16:41:30 +01:00
parent 18e15934fd
commit 634fdbfa96
2 changed files with 22 additions and 14 deletions

View file

@ -11,7 +11,15 @@ var debug = require('ghost-ignition').debug('settings:cache'),
* Contains the JSON version of the model
* @type {{}} - object of objects
*/
settingsCache = {};
settingsCache = {},
_private = {};
// Local function, only ever used for initialising
// We deliberately call "set" on each model so that set is a consistent interface
_private.updateSettingFromModel = function updateSettingFromModel(settingModel) {
debug('Auto updating', settingModel.get('key'));
module.exports.set(settingModel.get('key'), settingModel.toJSON());
};
/**
*
@ -86,28 +94,25 @@ module.exports = {
* @return {{}}
*/
init: function init(settingsCollection) {
var self = this;
// Local function, only ever used for initialising
// We deliberately call "set" on each model so that set is a consistent interface
function updateSettingFromModel(settingModel) {
debug('Auto updating', settingModel.get('key'));
self.set(settingModel.get('key'), settingModel.toJSON());
}
// First, reset the cache
settingsCache = {};
// // if we have been passed a collection of settings, use this to populate the cache
if (settingsCollection && settingsCollection.models) {
_.each(settingsCollection.models, updateSettingFromModel);
_.each(settingsCollection.models, _private.updateSettingFromModel);
}
// Bind to events to automatically keep up-to-date
common.events.on('settings.edited', updateSettingFromModel);
common.events.on('settings.added', updateSettingFromModel);
common.events.on('settings.deleted', updateSettingFromModel);
common.events.on('settings.edited', _private.updateSettingFromModel);
common.events.on('settings.added', _private.updateSettingFromModel);
common.events.on('settings.deleted', _private.updateSettingFromModel);
return settingsCache;
},
shutdown: function () {
common.events.removeListener('settings.edited', _private.updateSettingFromModel);
common.events.removeListener('settings.added', _private.updateSettingFromModel);
common.events.removeListener('settings.deleted', _private.updateSettingFromModel);
}
};

View file

@ -19,6 +19,7 @@ var Promise = require('bluebird'),
models = require('../../server/models'),
urlService = require('../../server/services/url'),
SettingsLib = require('../../server/services/settings'),
SettingsCache = require('../../server/services/settings/cache'),
customRedirectsMiddleware = require('../../server/web/middleware/custom-redirects'),
permissions = require('../../server/services/permissions'),
sequence = require('../../server/lib/promise/sequence'),
@ -502,6 +503,7 @@ toDoList = {
return fixtures.insertApps();
},
settings: function populateSettings() {
SettingsCache.shutdown();
return SettingsLib.init();
},
'users:roles': function createUsersWithRoles() {
@ -872,6 +874,7 @@ startGhost = function startGhost(options) {
return knexMigrator.init({only: 2});
})
.then(function () {
SettingsCache.shutdown();
return SettingsLib.init();
})
.then(function () {