You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
2.1 KiB
128 lines
2.1 KiB
8 years ago
|
import Vue from 'vue'
|
||
|
|
||
|
describe('Options provide/inject', () => {
|
||
|
let injected
|
||
|
const injectedComp = {
|
||
|
inject: ['foo', 'bar'],
|
||
|
render () {},
|
||
|
created () {
|
||
|
injected = [this.foo, this.bar]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
beforeEach(() => {
|
||
|
injected = null
|
||
|
})
|
||
|
|
||
|
it('should work', () => {
|
||
|
new Vue({
|
||
|
template: `<child/>`,
|
||
|
provide: {
|
||
|
foo: 1,
|
||
|
bar: 2
|
||
|
},
|
||
|
components: {
|
||
|
child: {
|
||
|
template: `<injected-comp/>`,
|
||
|
components: {
|
||
|
injectedComp
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}).$mount()
|
||
|
|
||
|
expect(injected).toEqual([1, 2])
|
||
|
})
|
||
|
|
||
|
it('should use closest parent', () => {
|
||
|
new Vue({
|
||
|
template: `<child/>`,
|
||
|
provide: {
|
||
|
foo: 1,
|
||
|
bar: 2
|
||
|
},
|
||
|
components: {
|
||
|
child: {
|
||
|
provide: {
|
||
|
foo: 3
|
||
|
},
|
||
|
template: `<injected-comp/>`,
|
||
|
components: {
|
||
|
injectedComp
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}).$mount()
|
||
|
|
||
|
expect(injected).toEqual([3, 2])
|
||
|
})
|
||
|
|
||
|
it('provide function', () => {
|
||
|
new Vue({
|
||
|
template: `<child/>`,
|
||
|
data: {
|
||
|
a: 1,
|
||
|
b: 2
|
||
|
},
|
||
|
provide () {
|
||
|
return {
|
||
|
foo: this.a,
|
||
|
bar: this.b
|
||
|
}
|
||
|
},
|
||
|
components: {
|
||
|
child: {
|
||
|
template: `<injected-comp/>`,
|
||
|
components: {
|
||
|
injectedComp
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}).$mount()
|
||
|
|
||
|
expect(injected).toEqual([1, 2])
|
||
|
})
|
||
|
|
||
|
it('inject with alias', () => {
|
||
|
const injectAlias = {
|
||
|
inject: {
|
||
|
baz: 'foo',
|
||
|
qux: 'bar'
|
||
|
},
|
||
|
render () {},
|
||
|
created () {
|
||
|
injected = [this.baz, this.qux]
|
||
|
}
|
||
|
}
|
||
|
|
||
|
new Vue({
|
||
|
template: `<child/>`,
|
||
|
provide: {
|
||
|
foo: 1,
|
||
|
bar: 2
|
||
|
},
|
||
|
components: {
|
||
|
child: {
|
||
|
template: `<inject-alias/>`,
|
||
|
components: {
|
||
|
injectAlias
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}).$mount()
|
||
|
|
||
|
expect(injected).toEqual([1, 2])
|
||
|
})
|
||
|
|
||
|
it('self-inject', () => {
|
||
|
const vm = new Vue({
|
||
|
provide: {
|
||
|
foo: 1
|
||
|
},
|
||
|
inject: ['foo']
|
||
|
})
|
||
|
|
||
|
expect(vm.foo).toBe(1)
|
||
|
})
|
||
|
})
|