我遇到了一些问题,试图弄清楚为什么我非常简单的测试用例总是失败.我正在努力学习Vue中的测试是如何工作的,并且有一个非常简单的测试,其中element.focus()是触发器onMount(() => /* see implementation ?*/).

以下是我的组件:

const myInputRef = ref<HTMLInputElement | null>(null);
  onMounted(() => {
    if (myInputRef.value) {
      myInputRef.value.focus()
    }
  })
</script>

<template>
  <input ref="myInputRef" name="my-input" type="text">
  <label for="my-input">input:</label>
</template>

我的测试用例是:

describe('App', () => {
  it('should auto focus input element', async () => {
    const wrapper = mount(App);

    const inputElement = wrapper.find('input');

    expect(inputElement.exists()).toBeTruthy()

    await nextTick()

    expect(document.activeElement).toBe(inputElement.element)
  })
})

结果是,expect(inputElement.exists()).toBeTruthy()的判断结果很好,但 expect(document.activeElement).toBe(inputElement.element)的结果是:

AssertionError: expected <body></body> to be <input name="my-input" …(1)></input> // Object.is equality

enter image description here

我有什么不明白的吗?

推荐答案

Github Issue for enzyme.js (react) document.activeElement

在这里,我们讨论的是相同的JavaScript问题,而不考虑框架和包.

wrapper需要贴在单据正文上.

const wrapper = mount(App, { attachTo: document.body });

如果您注释掉第myInputRef.value.focus()行,您将清楚地看到,由于参数attachTo,缺省值activeElement是正文.

Javascript相关问答推荐

vue3类型脚本中可能未定义对象''

为什么子组件没有在reaction中渲染?

reaction如何在不使用符号的情况下允许多行返回?

添加/删除时React图像上传重新渲染上传的图像

创建1:1比例元素,以另一个元素为中心

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

从实时数据库(Firebase)上的子类别读取数据

类型脚本中只有字符串或数字键而不是符号键的对象

在这种情况下,如何 for each 元素添加id?

无法访问Vue 3深度监视器中对象数组的特定对象值'

material UI按钮组样式props 不反射

当使用';字母而不是与';var#39;一起使用时,访问窗口为什么返回未定义的?

同一类的所有div';S的模式窗口

如何在我的Next.js项目中.blob()我的图像文件?

try 使用PM2在AWS ubuntu服务器上运行 node 进程时出错

在SHINY R中的嵌套模块中,不能使用Java代码

触发异步函数后不能显示数据

Phaser3 preFX addGlow不支持zoom

无法设置RazorPay订阅API项目价格

react 路由如何使用从加载器返回的数据