A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/vuejs/vue-next/commit/349eb0f0ad78f9cb491278eb4c7f9fe0c2e78b79 below:

onServerPrefetch (#3070) · vuejs/core@349eb0f · GitHub

@@ -14,7 +14,9 @@ import {

14 14

watchEffect,

15 15

createVNode,

16 16

resolveDynamicComponent,

17 -

renderSlot

17 +

renderSlot,

18 +

onErrorCaptured,

19 +

onServerPrefetch

18 20

} from 'vue'

19 21

import { escapeHtml } from '@vue/shared'

20 22

import { renderToString } from '../src/renderToString'

@@ -859,5 +861,211 @@ function testRender(type: string, render: typeof renderToString) {

859 861

)

860 862

).toBe(`<div>A</div><div>B</div>`)

861 863

})

864 + 865 +

test('onServerPrefetch', async () => {

866 +

const msg = Promise.resolve('hello')

867 +

const app = createApp({

868 +

setup() {

869 +

const message = ref('')

870 +

onServerPrefetch(async () => {

871 +

message.value = await msg

872 +

})

873 +

return {

874 +

message

875 +

}

876 +

},

877 +

render() {

878 +

return h('div', this.message)

879 +

}

880 +

})

881 +

const html = await render(app)

882 +

expect(html).toBe(`<div>hello</div>`)

883 +

})

884 + 885 +

test('multiple onServerPrefetch', async () => {

886 +

const msg = Promise.resolve('hello')

887 +

const msg2 = Promise.resolve('hi')

888 +

const msg3 = Promise.resolve('bonjour')

889 +

const app = createApp({

890 +

setup() {

891 +

const message = ref('')

892 +

const message2 = ref('')

893 +

const message3 = ref('')

894 +

onServerPrefetch(async () => {

895 +

message.value = await msg

896 +

})

897 +

onServerPrefetch(async () => {

898 +

message2.value = await msg2

899 +

})

900 +

onServerPrefetch(async () => {

901 +

message3.value = await msg3

902 +

})

903 +

return {

904 +

message,

905 +

message2,

906 +

message3

907 +

}

908 +

},

909 +

render() {

910 +

return h('div', `${this.message} ${this.message2} ${this.message3}`)

911 +

}

912 +

})

913 +

const html = await render(app)

914 +

expect(html).toBe(`<div>hello hi bonjour</div>`)

915 +

})

916 + 917 +

test('onServerPrefetch are run in parallel', async () => {

918 +

const first = jest.fn(() => Promise.resolve())

919 +

const second = jest.fn(() => Promise.resolve())

920 +

let checkOther = [false, false]

921 +

let done = [false, false]

922 +

const app = createApp({

923 +

setup() {

924 +

onServerPrefetch(async () => {

925 +

checkOther[0] = done[1]

926 +

await first()

927 +

done[0] = true

928 +

})

929 +

onServerPrefetch(async () => {

930 +

checkOther[1] = done[0]

931 +

await second()

932 +

done[1] = true

933 +

})

934 +

},

935 +

render() {

936 +

return h('div', '')

937 +

}

938 +

})

939 +

await render(app)

940 +

expect(first).toHaveBeenCalled()

941 +

expect(second).toHaveBeenCalled()

942 +

expect(checkOther).toEqual([false, false])

943 +

expect(done).toEqual([true, true])

944 +

})

945 + 946 +

test('onServerPrefetch with serverPrefetch option', async () => {

947 +

const msg = Promise.resolve('hello')

948 +

const msg2 = Promise.resolve('hi')

949 +

const app = createApp({

950 +

data() {

951 +

return {

952 +

message: ''

953 +

}

954 +

},

955 + 956 +

async serverPrefetch() {

957 +

this.message = await msg

958 +

},

959 + 960 +

setup() {

961 +

const message2 = ref('')

962 +

onServerPrefetch(async () => {

963 +

message2.value = await msg2

964 +

})

965 +

return {

966 +

message2

967 +

}

968 +

},

969 +

render() {

970 +

return h('div', `${this.message} ${this.message2}`)

971 +

}

972 +

})

973 +

const html = await render(app)

974 +

expect(html).toBe(`<div>hello hi</div>`)

975 +

})

976 + 977 +

test('mixed in serverPrefetch', async () => {

978 +

const msg = Promise.resolve('hello')

979 +

const app = createApp({

980 +

data() {

981 +

return {

982 +

msg: ''

983 +

}

984 +

},

985 +

mixins: [

986 +

{

987 +

async serverPrefetch() {

988 +

this.msg = await msg

989 +

}

990 +

}

991 +

],

992 +

render() {

993 +

return h('div', this.msg)

994 +

}

995 +

})

996 +

const html = await render(app)

997 +

expect(html).toBe(`<div>hello</div>`)

998 +

})

999 + 1000 +

test('many serverPrefetch', async () => {

1001 +

const foo = Promise.resolve('foo')

1002 +

const bar = Promise.resolve('bar')

1003 +

const baz = Promise.resolve('baz')

1004 +

const app = createApp({

1005 +

data() {

1006 +

return {

1007 +

foo: '',

1008 +

bar: '',

1009 +

baz: ''

1010 +

}

1011 +

},

1012 +

mixins: [

1013 +

{

1014 +

async serverPrefetch() {

1015 +

this.foo = await foo

1016 +

}

1017 +

},

1018 +

{

1019 +

async serverPrefetch() {

1020 +

this.bar = await bar

1021 +

}

1022 +

}

1023 +

],

1024 +

async serverPrefetch() {

1025 +

this.baz = await baz

1026 +

},

1027 +

render() {

1028 +

return h('div', `${this.foo}${this.bar}${this.baz}`)

1029 +

}

1030 +

})

1031 +

const html = await render(app)

1032 +

expect(html).toBe(`<div>foobarbaz</div>`)

1033 +

})

1034 + 1035 +

test('onServerPrefetch throwing error', async () => {

1036 +

let renderError: Error | null = null

1037 +

let capturedError: Error | null = null

1038 + 1039 +

const Child = {

1040 +

setup() {

1041 +

onServerPrefetch(async () => {

1042 +

throw new Error('An error')

1043 +

})

1044 +

},

1045 +

render() {

1046 +

return h('span')

1047 +

}

1048 +

}

1049 + 1050 +

const app = createApp({

1051 +

setup() {

1052 +

onErrorCaptured(e => {

1053 +

capturedError = e

1054 +

return false

1055 +

})

1056 +

},

1057 +

render() {

1058 +

return h('div', h(Child))

1059 +

}

1060 +

})

1061 + 1062 +

try {

1063 +

await render(app)

1064 +

} catch (e) {

1065 +

renderError = e

1066 +

}

1067 +

expect(renderError).toBe(null)

1068 +

expect(((capturedError as unknown) as Error).message).toBe('An error')

1069 +

})

862 1070

})

863 1071

}


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4