InlineEdit组件测试用例报错

InlineEdit组件测试用例报错

https://img1.sycdn.imooc.com//climg/620d1e36093ae79b16821734.jpg


const events = wrapper.emitted('change')  这行events打印结果是undifined。不知道为什么会这样。

仓库地址https://git.imooc.com/mryq2104/lego.git


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好 你这个不是测试结果错误,而是 ts 的类型错误,新版的 vue-test-utils 将 events 的返回有可能是 undefined, 所以我们需要使用一下 type guard,先判断一下。

const events = wrapper.emitted('change')
if (events && events.length > 0) {
    expect(events[0]).toEqual(['testnew'])
}

亲测可用~

  • ku咖啡不加糖 提问者 #1

    虽然可以这么写。但是测试代码应该执行不到expect(events[0]).toEqual(['testnew'])这一步。因为每次执行events 都是undefined,可是按课上讲的逻辑说,change应该被触发了才对(也就是events有值)。我看官方文档的用法也跟课程一样,不同的是我们的events木有返回值,需要怎样处理可以让它有值呢

    2022-02-18 10:18:04
  • 张轩 回复 提问者 ku咖啡不加糖 #2

    同学你好 抱歉我看的草率了 我用你的重新试了,确实没有触发,你的版本是 2.0.0-rc1, 经查,这是这个版本的 bug,所有事件都没法触发,升级以后就可以了。

    npm install @vue/test-utils@next --save-dev

    现在是 rc18,可以正常使用。

      // 事件可以正常触发
        {
          click: [ [ [MouseEvent] ] ],
          input: [ [ [Event] ] ],
          change: [ [ 'testnew' ] ]
        }

    如果不想用 if 跳过,(这是不好的实践,因为我们就想判断是否成功),可以使用类型断言。

    const events = wrapper.emitted('change') as string[]
    expect(events[0]).toEqual(['testnew'])

    现在没问题了

    2022-02-18 10:59:16
  • ku咖啡不加糖 提问者 回复 张轩 #3

    谢谢老师,亲测可行!

    2022-02-18 22:28:39
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师