[FIX] component: properly validate multiple props

Because of a "break" statement instead of "continue", the check for valid
props was stopping as soon as it met an optional props, which kind of
invalidate the whole system.

closes #717
This commit is contained in:
Géry Debongnie
2020-09-16 22:21:20 +02:00
committed by aab-odoo
parent e5e7790530
commit fe34ba00a6
2 changed files with 26 additions and 1 deletions
+1 -1
View File
@@ -37,7 +37,7 @@ QWeb.utils.validateProps = function (Widget, props: Object) {
if (propsDef[propName] && !propsDef[propName].optional) { if (propsDef[propName] && !propsDef[propName].optional) {
throw new Error(`Missing props '${propName}' (component '${Widget.name}')`); throw new Error(`Missing props '${propName}' (component '${Widget.name}')`);
} else { } else {
break; continue;
} }
} }
let isValid; let isValid;
+25
View File
@@ -786,6 +786,31 @@ describe("props validation", () => {
await nextTick(); await nextTick();
expect(fixture.innerHTML).toBe("<div><div>4</div></div>"); expect(fixture.innerHTML).toBe("<div><div>4</div></div>");
}); });
test("mix of optional and mandatory", async () => {
class Child extends Component {
static props = {
optional: { type: String, optional: true },
mandatory: Number,
};
static template = xml` <div><t t-esc="props.mandatory"/></div>`;
}
class App extends Component {
static components = { Child };
static template = xml`<div><Child/></div>`;
}
const w = new App(undefined, {});
let error;
try {
await w.mount(fixture);
} catch (e) {
error = e;
}
expect(error).toBeDefined();
expect(error.message).toBe("Missing props 'mandatory' (component 'Child')");
});
}); });
describe("default props", () => { describe("default props", () => {