refactor: move prop decorator into core, expose initial props to initialziers

This commit is contained in:
Evan You
2019-02-26 21:33:50 -05:00
parent 2f165c1e87
commit ff9cddd46f
12 changed files with 53 additions and 62 deletions

View File

@@ -0,0 +1,65 @@
import { prop } from '../src/optional/propDecorator'
import { Component, createInstance } from '@vue/runtime-test'
test('without options', () => {
let capturedThisValue
let capturedPropsValue
class Foo extends Component<{ p: number }> {
@prop
p: number
created() {
capturedThisValue = this.p
capturedPropsValue = this.$props.p
}
}
createInstance(Foo, {
p: 1
})
expect(capturedThisValue).toBe(1)
expect(capturedPropsValue).toBe(1)
// explicit override
createInstance(Foo, {
p: 2
})
expect(capturedThisValue).toBe(2)
expect(capturedPropsValue).toBe(2)
})
test('with options', () => {
let capturedThisValue
let capturedPropsValue
let capturedDataValue
class Foo extends Component<{ p: number }> {
@prop({
default: 1
})
p: number
// data property should be able to make use of prop
d: number = this.p + 1
created() {
capturedThisValue = this.p
capturedPropsValue = this.$props.p
capturedDataValue = this.d
}
}
// default value
createInstance(Foo)
expect(capturedThisValue).toBe(1)
expect(capturedPropsValue).toBe(1)
expect(capturedDataValue).toBe(2)
// explicit override
createInstance(Foo, {
p: 2
})
expect(capturedThisValue).toBe(2)
expect(capturedPropsValue).toBe(2)
expect(capturedDataValue).toBe(3)
})