|
|
@@ -482,6 +482,54 @@ describe('api: createApp', () => {
|
|
|
expect(serializeInner(root)).toBe('hello')
|
|
|
})
|
|
|
|
|
|
+ test('return property "_" should not overwrite "ctx._", __isScriptSetup: false', () => {
|
|
|
+ const Comp = defineComponent({
|
|
|
+ setup() {
|
|
|
+ return {
|
|
|
+ _: ref(0) // return property "_" should not overwrite "ctx._"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ render() {
|
|
|
+ return h('input', {
|
|
|
+ ref: 'input'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const root1 = nodeOps.createElement('div')
|
|
|
+ createApp(Comp).mount(root1)
|
|
|
+
|
|
|
+ expect(
|
|
|
+ `setup() return property "_" should not start with "$" or "_" which are reserved prefixes for Vue internals.`
|
|
|
+ ).toHaveBeenWarned()
|
|
|
+ })
|
|
|
+
|
|
|
+ test('return property "_" should not overwrite "ctx._", __isScriptSetup: true', () => {
|
|
|
+ const Comp = defineComponent({
|
|
|
+ setup() {
|
|
|
+ return {
|
|
|
+ _: ref(0), // return property "_" should not overwrite "ctx._"
|
|
|
+ __isScriptSetup: true // mock __isScriptSetup = true
|
|
|
+ }
|
|
|
+ },
|
|
|
+ render() {
|
|
|
+ return h('input', {
|
|
|
+ ref: 'input'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ const root1 = nodeOps.createElement('div')
|
|
|
+ const app = createApp(Comp).mount(root1)
|
|
|
+
|
|
|
+ // trigger
|
|
|
+ app.$refs.input
|
|
|
+
|
|
|
+ expect(
|
|
|
+ `TypeError: Cannot read property '__isScriptSetup' of undefined`
|
|
|
+ ).not.toHaveBeenWarned()
|
|
|
+ })
|
|
|
+
|
|
|
// config.compilerOptions is tested in packages/vue since it is only
|
|
|
// supported in the full build.
|
|
|
})
|