diff --git a/src/compile/nodes/Binding.ts b/src/compile/nodes/Binding.ts
index 213314c3cb..050b7f131c 100644
--- a/src/compile/nodes/Binding.ts
+++ b/src/compile/nodes/Binding.ts
@@ -38,6 +38,12 @@ export default class Binding extends Node {
});
} else {
const variable = component.var_lookup.get(name);
+
+ if (!variable) component.error(this.expression.node, {
+ code: 'binding-undeclared',
+ message: `${name} is not declared`
+ });
+
variable[this.expression.node.type === 'MemberExpression' ? 'mutated' : 'reassigned'] = true;
}
diff --git a/test/validator/index.js b/test/validator/index.js
index 9ca3fc57d1..517427e817 100644
--- a/test/validator/index.js
+++ b/test/validator/index.js
@@ -64,11 +64,16 @@ describe("validate", () => {
throw new Error(`Expected an error: ${expected.message}`);
}
- assert.equal(error.code, expected.code);
- assert.equal(error.message, expected.message);
- assert.deepEqual(error.start, expected.start);
- assert.deepEqual(error.end, expected.end);
- assert.equal(error.pos, expected.pos);
+ try {
+ assert.equal(error.code, expected.code);
+ assert.equal(error.message, expected.message);
+ assert.deepEqual(error.start, expected.start);
+ assert.deepEqual(error.end, expected.end);
+ assert.equal(error.pos, expected.pos);
+ } catch (e) {
+ console.error(error)
+ throw e;
+ }
}
});
});
@@ -102,7 +107,7 @@ describe("validate", () => {
name: "_",
generate: false
});
-
+
assert.deepEqual(stats.warnings, []);
});
});
diff --git a/test/validator/samples/binding-invalid-value/errors.json b/test/validator/samples/binding-invalid-value/errors.json
new file mode 100644
index 0000000000..07eb7b0f1c
--- /dev/null
+++ b/test/validator/samples/binding-invalid-value/errors.json
@@ -0,0 +1,15 @@
+[{
+ "code": "binding-undeclared",
+ "message": "foo is not declared",
+ "pos": 37,
+ "start": {
+ "line": 2,
+ "column": 19,
+ "character": 37
+ },
+ "end": {
+ "line": 2,
+ "column": 22,
+ "character": 40
+ }
+}]
\ No newline at end of file
diff --git a/test/validator/samples/binding-invalid-value/input.html b/test/validator/samples/binding-invalid-value/input.html
new file mode 100644
index 0000000000..9eeeba5fed
--- /dev/null
+++ b/test/validator/samples/binding-invalid-value/input.html
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file