在单元测试中禁止Vue警告

bor*_*mer 6 vue.js vue-test-utils

我试图按照此处列出的配置在我的测试中禁止显示警告:https : //vue-test-utils.vuejs.org/api/config.html#silent,如下所示:

import { config } from '@vue/test-utils';

// this should actually be the default but the default is not working
config.silent = true;
Run Code Online (Sandbox Code Playgroud)

但是,我仍然在测试结果中看到警告:

  TheQueue
? should show the queue bar if there are items queued
? should show the correct count of queued items in queued bar
[Vue warn]: Avoid mutating a prop directly since the value will be 
overwritten whenever the parent component re-renders. Instead, use a 
data or computed property based on the prop's value. Prop being 
mutated: "mdTemplateData"

found in

---> <MdTab>
       <MdContent>
         <MdTabs>
           <MdDrawer>
             <TheQueue> at src/components/the-queue/TheQueue.vue
               <Root>
Run Code Online (Sandbox Code Playgroud)

值得注意的是,我在正常使用该应用程序时未看到此错误。这只会在测试中弹出(否则我将尝试修复实际的建议问题)。

我在这里做错了什么,为什么我不能抑制这些警告?还是我误会了silent应该做什么?

Ali*_*ami 9

根据 VueJS 文档 - https://vue-test-utils.vuejs.org/api/config.html#silent

沉默的

类型:布尔值

默认值:true

它会在改变组件的可观察值(例如 props)时抑制 Vue 触发的警告。当设置为 false 时,所有警告都在控制台中可见。这是一种依赖于 Vue.config.silent 的可配置方式。

它依赖于 Vue.config.silent,所以你需要的只是导入vue包并将其设置config.silentfalse

import Vue from `vue`
Vue.config.silent = true;
Run Code Online (Sandbox Code Playgroud)

我在我的 Github 上放了一个工作示例,它只是官方示例的一个分支,但在测试期间不会显示警告。

https://github.com/al1b/vue-test-utils-getting-started

了解更多信息:

如果你检查源代码

  warn = (msg, vm) => {
    const trace = vm ? generateComponentTrace(vm) : ''

    if (config.warnHandler) {
      config.warnHandler.call(null, msg, vm, trace)
    } else if (hasConsole && (!config.silent)) {
      console.error(`[Vue warn]: ${msg}${trace}`)
    }
  }
Run Code Online (Sandbox Code Playgroud)