开玩笑测试 - TypeError:document.createRange 不是函数

Posted

技术标签:

【中文标题】开玩笑测试 - TypeError:document.createRange 不是函数【英文标题】:Jest Test - TypeError : document.createRange is not a function 【发布时间】:2020-08-24 17:33:40 【问题描述】:

我的测试

import VueI18n from 'vue-i18n'
import Vuex from "vuex"
import iView from 'view-design'
import mount,createLocalVue from '@vue/test-utils'
// @ts-ignore
import FormAccountName from '@/views/forms/FormAccountName/FormAccountName'
const localVue = createLocalVue()
localVue.use(Vuex)
localVue.use(iView)
localVue.use(VueI18n)
describe('a',()=>
    test('b',async ()=>
        const wrapper = mount(FormAccountName,
            localVue,
            mocks: 
                $t: () => 'this is a label',
                formItems: 
                    name: '<a>'
                
            ,
        )
        expect(wrapper).toMatchSnapshot()
    )
)

错误

快照正常生成,但报错

[Vue 警告]:nextTick 中的错误:“TypeError: document.createRange is not a function”

found in

---> <Tooltip>
       <ErrorTooltipTs>
         <ValidationProvider>
           <FormRow>
             <ValidationObserver>
               <FormWrapper>
                 <FormAccountNameUpdateTs>
                   <Root>

作为 iView 标签,但我已经对其进行了初始化。 所以我不知道出了什么问题。有人可以帮我吗?

【问题讨论】:

也许您应该在创建包装器时指明 options.attachedToDocument?见vue-test-utils.vuejs.org/api/wrapper/#properties 非常感谢@Anatoly,我已经解决了。查看其他人的答案并添加默认的'document.createrange' 【参考方案1】:

在 pollyfill.js 或 testSetup 中添加下面的配置模拟代码

global.document.createRange = () => (
        setStart: () => ,
        setEnd: () => ,
        commonAncestorContainer: 
            nodeName: 'BODY',
            ownerDocument: document
        ,
        createContextualFragment: jest.fn
    );

【讨论】:

【参考方案2】:
document.createRange = () => (
    setStart: () => ,
    setEnd: () => ,
    //@ts-ignore
    commonAncestorContainer: 
      nodeName: "BODY",
      ownerDocument: document,
    ,
  )

【讨论】:

以上是关于开玩笑测试 - TypeError:document.createRange 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:state.customerComplaints.add 不是开玩笑单元测试中的函数

用 TypeScript 开玩笑:TypeError: environment.teardown 不是函数

TypeError:无法使用玩笑读取未定义的属性“原型”

在开玩笑的单元测试角度显示正确的错误

Vue.Js 测试与开玩笑错误 axios

反应开玩笑测试错误 - 未定义 useContext 的对象