课程章节介绍
大家注意了,这个Slide是关于Wire Service测试当中数据的模拟方式。我们通常说的“emit模式”,就是指在测试环境里,通过调用adapter.emit(),把假的响应数据塞进组件的@wire适配器里。
具体怎么做呢?首先,测试文件里要导入跟被测组件一模一样的那个有线适配器。然后你要把组件先插入到DOM里,也就是执行appendChild,这样组件才连上DOM,开始监听数据的变化。记住,组件只有挂载到DOM上之后,它才会接收更新,所以我们一定要在appendChild完成之后再调用emit。
调用的时候,就是adapter.emit(你准备好的模拟数据)。这些模拟数据有一个关键点:它的结构必须跟真实的后端UI API响应格式一模一样。不要去手写那些JSON,很容易写错。最好的办法是用REST客户端,比如Workbench或者Postman,去捕获一次真实的响应,把它复制下来。如果你用的是Lightning Data Service(LDS)线适配器,你会发现官方示例里,数据文件夹中已经有一些以适配器命名的JSON文件,比如getRecord.json,这些其实就是从真实API粘过来的响应,直接就能用。
接下来,emit完了别急着做断言,因为组件更新是异步的。我们必须要用Promise.resolve(),然后把后续的断言链在这个微任务后面,这样才能等到组件重新渲染完成,再去检查DOM或属性。
最后提一句,在22年春季版本之前,我们是使用registerLdsTestWireAdapter这种旧的注册模式,现在仍然兼容,但官方已经不推荐了,咱们就用新的emit模式,代码更简洁,也更容易理解。
好了,这一页的核心就这些,大家有没有问题?
关键词
LWC
Lightning Web Components
Salesforce