Просмотр исходного кода

add test for x-init eval errors

Hugo Di Francesco 4 лет назад
Родитель
Сommit
4f3a760bd4
3 измененных файлов с 15 добавлено и 3 удалено
  1. 1 2
      src/component.js
  2. 1 1
      src/utils.js
  3. 13 0
      test/error.spec.js

+ 1 - 2
src/component.js

@@ -354,8 +354,7 @@ export default class Component {
         return tryCatch(() => saferEval(expression, this.$data, {
             ...extraVars(),
             $dispatch: this.getDispatchFunction(el),
-        }),
-        { el, expression })
+        }), { el, expression })
     }
 
     evaluateCommandExpression(el, expression, extraVars = () => {}) {

+ 1 - 1
src/utils.js

@@ -67,7 +67,7 @@ export function debounce(func, wait) {
 
 const handleError = (el, expression, error) => {
     console.error(`Alpine: error in expression "${expression}" in component:`, el, `due to "${error}"`);
-    if (!isTesting()) {
+    if (! isTesting()) {
         throw error;
     }
 }

+ 13 - 0
test/error.spec.js

@@ -29,6 +29,19 @@ test('error in x-data eval contains element, expression and original error', asy
     )
 })
 
+test('error in x-init eval contains element, expression and original error', async () => {
+    document.body.innerHTML = `
+        <div x-data x-init="foo.bar = 'baz'">
+        </div>
+    `
+    await Alpine.start()
+    expect(mockConsoleError).toHaveBeenCalledWith(
+        "Alpine: error in expression \"foo.bar = 'baz'\" in component:",
+        document.querySelector('[x-data]'),
+        "due to \"ReferenceError: foo is not defined\""
+    )
+})
+
 test('error in x-bind eval contains element, expression and original error', async () => {
     document.body.innerHTML = `
         <div x-data="{ foo: null }">