[IMP] web: don't check for bad dom after test on failure
Currently, if a test fails there's very high chances the DOM will not be clean, because qunit doesn't have good cleanup APIs. This means a test failure will always be prefixed by a dump of the page DOM which is just confusing and makes it hard to find the actual error. This change updates the OdooAfterTestHook handler to: * Receive the `Test` itself, instead of adding more information to the synthetic object it currently receives. * Only show the leftover DOM if the test otherwise succeeded. * Do the entire reporting via `pushFailure`, rather than having duplication between an explicit `console.error` and a test failure. * Update the QUnit.log handler to - not show `undefined` - try to improve readability by removing the bracketing and quoting closes odoo/odoo#75951 Forward-port-of: #75939 X-original-commit: 8bceac8032f48ae77e8a2c0c038f3bc26489e0ac Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
This commit is contained in:
@@ -2981,6 +2981,7 @@
|
||||
}
|
||||
|
||||
Test.prototype = {
|
||||
get moduleName() { return this.module.name; },
|
||||
before: function before() {
|
||||
var _this = this;
|
||||
|
||||
@@ -3147,7 +3148,7 @@
|
||||
this.pushFailure("Expected at least one assertion, but none were run - call " + "expect(0) to accept zero assertions.", this.stack);
|
||||
}
|
||||
|
||||
emit("OdooAfterTestHook", { moduleName: this.module.name, testName: this.testName }); // Odoo customization
|
||||
emit("OdooAfterTestHook", this); // Odoo customization
|
||||
|
||||
var i,
|
||||
module = this.module,
|
||||
|
||||
@@ -72,17 +72,15 @@ QUnit.on("OdooAfterTestHook", function (info) {
|
||||
if (QUnit.config.debug) {
|
||||
return;
|
||||
}
|
||||
const failed = info.testReport.getStatus() === 'failed';
|
||||
const toRemove = [];
|
||||
// check for leftover elements in the body
|
||||
for (const bodyChild of document.body.children) {
|
||||
const tolerated = validElements.find(
|
||||
(e) => e.tagName === bodyChild.tagName && bodyChild.getAttribute(e.attr) === e.value
|
||||
);
|
||||
if (!tolerated) {
|
||||
console.error(
|
||||
`Test ${info.moduleName} > ${info.testName}: body still contains undesirable elements:
|
||||
${bodyChild.outerHTML}`);
|
||||
QUnit.pushFailure(`Body still contains undesirable elements`);
|
||||
if (!failed && !tolerated) {
|
||||
QUnit.pushFailure(`Body still contains undesirable elements:\n${bodyChild.outerHTML}`);
|
||||
}
|
||||
if (!tolerated || !tolerated.keep) {
|
||||
toRemove.push(bodyChild);
|
||||
|
||||
Reference in New Issue
Block a user