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:
parent
18e15934fd
commit
634fdbfa96
2 changed files with 22 additions and 14 deletions
|
@ -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);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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 () {
|
||||
|
|
Loading…
Add table
Reference in a new issue