jest 测试中重新抛出错误导致 vue 警告
Rethrowing an error causes vue warning in jest test
我有一个 vue 应用程序,它包含一个页面组件和一个嵌套的 child 组件,这使得异步 post-request。如果请求失败,则会抛出一个错误,该错误会传播到顶级组件 (Page.vue
)。此顶级组件使用 errorCaptured
-Lifecycle 挂钩处理其 child 的所有错误。这是 stackblitz
上的一个工作示例
该机制运行良好,我的应用程序没有显示任何警告。但是,我想 测试我的 child 组件隔离 开玩笑和 vue-test-utils。因此,我做了一个测试:
import { mount } from "@vue/test-utils";
import Child from "./Child";
jest.mock("./api", () => ({
createSomething: jest.fn(),
}));
it("creation is erroneous", async () => {
const wrapper = mount(Child);
createSomething.mockImplementation(() => {
throw new Error("error");
});
let createAction = wrapper.find("[data-test-create]");
await createAction.trigger("click");
});
但是,因为 错误被重新抛出并且从未被 parent 组件捕获 ,所以在我的测试输出中总是有一个控制台日志语句:
console.warn
[Vue warn]: Unhandled error during execution of native event handler
at <Child ref="VTU_COMPONENT" >
at <VTUROOT>
我该如何解决这个问题?我试图用 try/catch
包装 await createAction.trigger("click");
但它不起作用。我需要模拟 parent 的 errorCaptured 生命周期吗?
一种解决方案是设置 no-op app.config.errorHandler
via the global.config
安装选项:
const wrapper = mount(Child, {
global: {
config: {
errorHandler(err) { /* ignore */ },
},
},
})
我有一个 vue 应用程序,它包含一个页面组件和一个嵌套的 child 组件,这使得异步 post-request。如果请求失败,则会抛出一个错误,该错误会传播到顶级组件 (Page.vue
)。此顶级组件使用 errorCaptured
-Lifecycle 挂钩处理其 child 的所有错误。这是 stackblitz
该机制运行良好,我的应用程序没有显示任何警告。但是,我想 测试我的 child 组件隔离 开玩笑和 vue-test-utils。因此,我做了一个测试:
import { mount } from "@vue/test-utils";
import Child from "./Child";
jest.mock("./api", () => ({
createSomething: jest.fn(),
}));
it("creation is erroneous", async () => {
const wrapper = mount(Child);
createSomething.mockImplementation(() => {
throw new Error("error");
});
let createAction = wrapper.find("[data-test-create]");
await createAction.trigger("click");
});
但是,因为 错误被重新抛出并且从未被 parent 组件捕获 ,所以在我的测试输出中总是有一个控制台日志语句:
console.warn
[Vue warn]: Unhandled error during execution of native event handler
at <Child ref="VTU_COMPONENT" >
at <VTUROOT>
我该如何解决这个问题?我试图用 try/catch
包装 await createAction.trigger("click");
但它不起作用。我需要模拟 parent 的 errorCaptured 生命周期吗?
一种解决方案是设置 no-op app.config.errorHandler
via the global.config
安装选项:
const wrapper = mount(Child, {
global: {
config: {
errorHandler(err) { /* ignore */ },
},
},
})