Explorar el Código

test: improve tests and typing for runtime-core (#100)

* test: add test case for declaring Array prop type with constructor casting in `createComponent`

* test: add test case for `setup(props)` with explicit props declaration
Carlos Rodrigues hace 6 años
padre
commit
8133b3867a

+ 2 - 2
packages/runtime-core/__tests__/apiApp.spec.ts

@@ -124,10 +124,10 @@ describe('api: createApp', () => {
       },
       },
       setup() {
       setup() {
         // resolve in setup
         // resolve in setup
-        const FooBar = resolveDirective('foo-bar') as any
+        const FooBar = resolveDirective('foo-bar')!
         return () => {
         return () => {
           // resolve in render
           // resolve in render
-          const BarBaz = resolveDirective('bar-baz') as any
+          const BarBaz = resolveDirective('bar-baz')!
           return applyDirectives(h('div'), [[FooBar], [BarBaz]])
           return applyDirectives(h('div'), [[FooBar], [BarBaz]])
         }
         }
       }
       }

+ 10 - 3
packages/runtime-core/__tests__/apiCreateComponent.spec.tsx

@@ -22,10 +22,17 @@ test('createComponent type inference', () => {
         default: 'hello'
         default: 'hello'
       },
       },
       // explicit type casting
       // explicit type casting
-      cc: (Array as any) as PropType<string[]>,
+      cc: Array as PropType<string[]>,
       // required + type casting
       // required + type casting
       dd: {
       dd: {
-        type: (Array as any) as PropType<string[]>,
+        type: Array as PropType<string[]>,
+        required: true
+      },
+      // explicit type casting with constructor
+      ccc: Array as () => string[],
+      // required + contructor type casting
+      ddd: {
+        type: Array as () => string[],
         required: true
         required: true
       }
       }
     } as const, // required to narrow for conditional check
     } as const, // required to narrow for conditional check
@@ -60,7 +67,7 @@ test('createComponent type inference', () => {
     }
     }
   })
   })
   // test TSX props inference
   // test TSX props inference
-  ;(<MyComponent a={1} b="foo" dd={['foo']}/>)
+  ;(<MyComponent a={1} b="foo" dd={['foo']} ddd={['foo']}/>)
 })
 })
 
 
 test('type inference w/ optional props declaration', () => {
 test('type inference w/ optional props declaration', () => {

+ 33 - 0
packages/runtime-core/__tests__/apiSetupContext.spec.ts

@@ -74,6 +74,39 @@ describe('api: setup context', () => {
     expect(dummy).toBe(1)
     expect(dummy).toBe(1)
   })
   })
 
 
+  it('setup props should resolve the correct types from props object', async () => {
+    const count = ref(0)
+    let dummy
+
+    const Parent = {
+      render: () => h(Child, { count: count.value })
+    }
+
+    const Child = createComponent({
+      props: {
+        count: Number
+      },
+
+      setup(props) {
+        watch(() => {
+          dummy = props.count
+        })
+        return () => h('div', props.count)
+      }
+    })
+
+    const root = nodeOps.createElement('div')
+    render(h(Parent), root)
+    expect(serializeInner(root)).toMatch(`<div>0</div>`)
+    expect(dummy).toBe(0)
+
+    // props should be reactive
+    count.value++
+    await nextTick()
+    expect(serializeInner(root)).toMatch(`<div>1</div>`)
+    expect(dummy).toBe(1)
+  })
+
   it('context.attrs', async () => {
   it('context.attrs', async () => {
     const toggle = ref(true)
     const toggle = ref(true)
 
 

+ 1 - 1
packages/runtime-core/__tests__/rendererSuspense.spec.ts

@@ -517,7 +517,7 @@ describe('renderer: suspense', () => {
 
 
     const Comp = {
     const Comp = {
       setup() {
       setup() {
-        const error = ref<any>(null)
+        const error = ref<Error | null>(null)
         onErrorCaptured(e => {
         onErrorCaptured(e => {
           error.value = e
           error.value = e
           return true
           return true