【问题标题】:mocha programmatically set vue error handlermocha 以编程方式设置 vue 错误处理程序
【发布时间】:2017-11-28 10:41:43
【问题描述】:

我发现自己在 mocha 中几乎所有的单元测试开始时都在写这个:

it('should do something', (done) => {
  Vue.config.errorHandler = done;

  // do something aynchronous
});

默认情况下,Vue 自己捕获所有错误并将它们记录到控制台,因此 mocha 看不到它们。此代码确保抛出的错误无法通过测试。

mocha 有没有办法做到这一点,而不必用这行代码开始每一个异步测试?如果我必须编写/使用插件,那很好。

【问题讨论】:

  • 我不使用 Mocha,但我使用过的每个测试框架都有某种设置和拆卸方法来处理这些事情。
  • @craig_h 是的,有一个 beforeEach 钩子。它只能用于在测试运行之前失败,而不是在测试阶段。

标签: vue.js mocha.js vue-test-utils


【解决方案1】:

试试:

Vue.config.errorHandler = function (err, vm, info) {
  throw err
}

在您的测试条目中。

【讨论】:

  • 如果在 promise 中调用错误处理程序,这将不起作用。
  • 它在我的测试中有效。尝试将您的异步测试从 done 调用更改为异步函数。例如it('should...', async () => { //... })@callumacrae
  • 这失败了:Vue.nextTick(() => { throw new Error('test'); }); - Vue.nextTick() 在内部使用承诺。
  • 这是意料之中的。 Promise 旨在在内部捕获错误。如果你坚持扔掉它们,你可以这样做var originalCatch = Promise.prototype.catch; Promise.prototype.catch = function(){throw new Error();return originalCatch.apply(this, arguments);}
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多