expect(root.innerHTML).toBe('<div><div>bar</div></div>')
})
+ test('hmr root reload', async () => {
+ const appId = 'test-app-id'
+ const App = {
+ __hmrId: appId,
+ template: `<div>foo</div>`,
+ }
+
+ const root = document.createElement('div')
+ root.innerHTML = await renderToString(h(App))
+ createSSRApp(App).mount(root)
+ expect(root.innerHTML).toBe('<div>foo</div>')
+
+ reload(appId, {
+ __hmrId: appId,
+ template: `<div>bar</div>`,
+ })
+ await nextTick()
+ expect(root.innerHTML).toBe('<div>bar</div>')
+ })
+
describe('mismatch handling', () => {
test('text node', () => {
const { container } = mountWithHydration(`foo`, () => 'bar')
// HMR root reload
if (__DEV__) {
context.reload = () => {
+ const cloned = cloneVNode(vnode)
+ // avoid hydration for hmr updating
+ cloned.el = null
// casting to ElementNamespace because TS doesn't guarantee type narrowing
// over function boundaries
- render(
- cloneVNode(vnode),
- rootContainer,
- namespace as ElementNamespace,
- )
+ render(cloned, rootContainer, namespace as ElementNamespace)
}
}