| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- import { compile } from '../src'
- describe('ssr: v-if', () => {
- test('basic', () => {
- expect(compile(`<div v-if="foo"></div>`).code).toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('with nested content', () => {
- expect(compile(`<div v-if="foo">hello<span>ok</span></div>`).code)
- .toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}>hello<span>ok</span></div>\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('v-if + v-else', () => {
- expect(compile(`<div v-if="foo"/><span v-else/>`).code)
- .toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
- } else {
- _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
- }
- }"
- `)
- })
- test('v-if + v-else-if', () => {
- expect(compile(`<div v-if="foo"/><span v-else-if="bar"/>`).code)
- .toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
- } else if (_ctx.bar) {
- _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('v-if + v-else-if + v-else', () => {
- expect(compile(`<div v-if="foo"/><span v-else-if="bar"/><p v-else/>`).code)
- .toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
- } else if (_ctx.bar) {
- _push(\`<span\${_ssrRenderAttrs(_attrs)}></span>\`)
- } else {
- _push(\`<p\${_ssrRenderAttrs(_attrs)}></p>\`)
- }
- }"
- `)
- })
- test('<template v-if> (text)', () => {
- expect(compile(`<template v-if="foo">hello</template>`).code)
- .toMatchInlineSnapshot(`
- "
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<!--[-->hello<!--]-->\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('<template v-if> (single element)', () => {
- // single element should not wrap with fragment
- expect(compile(`<template v-if="foo"><div>hi</div></template>`).code)
- .toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}>hi</div>\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('<template v-if> (multiple element)', () => {
- expect(
- compile(`<template v-if="foo"><div>hi</div><div>ho</div></template>`)
- .code,
- ).toMatchInlineSnapshot(`
- "
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<!--[--><div>hi</div><div>ho</div><!--]-->\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('<template v-if> (with v-for inside)', () => {
- expect(
- compile(`<template v-if="foo"><div v-for="i in list"/></template>`).code,
- ).toMatchInlineSnapshot(`
- "const { ssrRenderList: _ssrRenderList } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<!--[-->\`)
- _ssrRenderList(_ctx.list, (i) => {
- _push(\`<div></div>\`)
- })
- _push(\`<!--]-->\`)
- } else {
- _push(\`<!---->\`)
- }
- }"
- `)
- })
- test('<template v-if> + normal v-else', () => {
- expect(
- compile(
- `<template v-if="foo"><div>hi</div><div>ho</div></template><div v-else/>`,
- ).code,
- ).toMatchInlineSnapshot(`
- "const { ssrRenderAttrs: _ssrRenderAttrs } = require("vue/server-renderer")
- return function ssrRender(_ctx, _push, _parent, _attrs) {
- if (_ctx.foo) {
- _push(\`<!--[--><div>hi</div><div>ho</div><!--]-->\`)
- } else {
- _push(\`<div\${_ssrRenderAttrs(_attrs)}></div>\`)
- }
- }"
- `)
- })
- })
|