DEV: prevents route nodes to leak on each test run (#14457)

Note this commit is also adding support for teardown in pre-initializers just like we have for initializers.

Co-authored-by: Jarek Radosz <jradosz@gmail.com>
Co-authored-by: David Taylor <david@taylorhq.com>
This commit is contained in:
Joffrey JAFFEUX 2021-09-28 17:08:05 +02:00 committed by GitHub
parent a0cb340eef
commit 4dc14e3a3f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View File

@ -141,6 +141,11 @@ export function mapRoutes() {
this.route("unknown", { path: "*path" });
});
}
export function teardownRouter(container) {
const router = container.lookup("router:main");
const constructor = Object.getPrototypeOf(router).constructor;
constructor.dslCallbacks.splice(0, constructor.dslCallbacks.length);
}
export function registerRouter(registry) {
registry.unregister("router:main");

View File

@ -1,6 +1,6 @@
import Application from "@ember/application";
import { isLegacyEmber } from "discourse-common/config/environment";
import { registerRouter } from "discourse/mapping-router";
import { registerRouter, teardownRouter } from "discourse/mapping-router";
let originalBuildInstance;
@ -23,4 +23,8 @@ export default {
};
}
},
teardown(container) {
teardownRouter(container);
},
};

View File

@ -296,6 +296,11 @@ export function acceptance(name, optionsOrCallback) {
initializer.teardown(this.container);
}
});
app._runInitializer("initializers", (initName, initializer) => {
if (initializer && initializer.teardown) {
initializer.teardown(this.container);
}
});
if (LEGACY_ENV) {
app.__registeredObjects__ = false;