From 604edfaf1d1784a7224adfd95dedc749a3de23e5 Mon Sep 17 00:00:00 2001 From: Gleb Bahmutov Date: Wed, 8 Jul 2020 16:08:40 -0400 Subject: [PATCH] feat: automatically fail Cypress test on Vue-caught error --- .../component/basic/translated-message-spec.js | 3 ++- src/index.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cypress/component/basic/translated-message-spec.js b/cypress/component/basic/translated-message-spec.js index df04150..5d8f992 100644 --- a/cypress/component/basic/translated-message-spec.js +++ b/cypress/component/basic/translated-message-spec.js @@ -1,10 +1,11 @@ +/// + // testing i18n component // http://kazupon.github.io/vue-i18n import TranslatedMessage from './TranslatedMessage.vue' import VueI18n from 'vue-i18n' import { mountCallback } from 'cypress-vue-unit-test' -/* eslint-env mocha */ // https://github.com/bahmutov/cypress-vue-unit-test/issues/332 describe.skip('VueI18n', () => { // need to use VueI18n as a plugin diff --git a/src/index.ts b/src/index.ts index 7bdad12..7238a8d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -286,6 +286,20 @@ interface MountOptions { */ type MountOptionsArgument = Partial +/** + * Direct Vue errors to the top error handler + * where they will fail Cypress test + * @see https://vuejs.org/v2/api/#errorHandler + * @see https://github.com/cypress-io/cypress/issues/7910 + */ +function failTestOnVueError(err, vm, info) { + console.error(`Vue error 🔥`) + console.error(err) + console.error('component:', vm) + console.error('info:', info) + window.top.onerror(err) +} + /** * Mounts a Vue component inside Cypress browser. * @param {object} component imported from Vue file @@ -351,6 +365,8 @@ export const mount = ( .then((win) => { // @ts-ignore win.Vue = Vue + // @ts-ignore + win.Vue.config.errorHandler = failTestOnVueError // @ts-ignore const document: Document = cy.state('document')