ember-lifeline
Version:
Ember.js addon for lifecycle aware async tasks and DOM events.
39 lines (31 loc) • 1.19 kB
JavaScript
import require from 'require';
import { _setRegisteredDisposables } from 'ember-lifeline';
const FAILED_ASSERTION_MESSAGE =
'One or more objects registered disposables that were not correctly disposed of. Please ensure that objects correctly run their registered disposables by calling `runDisposables` in the `destroy` method of the object.';
let setupTestDone = false;
export default function setupLifelineValidation(hooks) {
let registeredDisposables = new Map();
hooks.beforeEach(function() {
_setRegisteredDisposables(registeredDisposables);
});
if (!setupTestDone) {
let QUnit = require('qunit').default;
QUnit.testDone(function(details) {
if (details.failed === 0 && registeredDisposables.size > 0) {
throw new Error(FAILED_ASSERTION_MESSAGE);
}
});
setupTestDone = true;
}
hooks.afterEach(function(assert) {
try {
let retainedObjects = [...registeredDisposables.keys()].map(o =>
o.toString()
);
assert.deepEqual(retainedObjects, [], FAILED_ASSERTION_MESSAGE);
} finally {
registeredDisposables = new WeakMap();
_setRegisteredDisposables(registeredDisposables);
}
});
}