import Vue from 'vue' describe('Options _scopeId', () => { it('should add scopeId attributes', () => { const vm = new Vue({ _scopeId: 'foo', template: '

' }).$mount() expect(vm.$el.hasAttribute('foo')).toBe(true) expect(vm.$el.children[0].hasAttribute('foo')).toBe(true) expect(vm.$el.children[0].children[0].hasAttribute('foo')).toBe(true) }) it('should add scopedId attributes from both parent and child on child root', () => { const vm = new Vue({ _scopeId: 'foo', template: '
', components: { child: { _scopeId: 'bar', template: '
' } } }).$mount() expect(vm.$el.children[0].hasAttribute('foo')).toBe(true) expect(vm.$el.children[0].hasAttribute('bar')).toBe(true) }) it('should add scopedId attributes from both parent and child on slot contents', () => { const vm = new Vue({ _scopeId: 'foo', template: '

hi

', components: { child: { _scopeId: 'bar', template: '
' } } }).$mount() expect(vm.$el.children[0].children[0].hasAttribute('foo')).toBe(true) expect(vm.$el.children[0].children[0].hasAttribute('bar')).toBe(true) }) // #4774 it('should not discard parent scopeId when component root element is replaced', done => { const vm = new Vue({ _scopeId: 'data-1', template: `
`, components: { child: { _scopeId: 'data-2', data: () => ({ show: true }), template: '
' } } }).$mount() const child = vm.$refs.child expect(child.$el.hasAttribute('data-1')).toBe(true) expect(child.$el.hasAttribute('data-2')).toBe(true) child.show = false waitForUpdate(() => { child.show = true }).then(() => { expect(child.$el.hasAttribute('data-1')).toBe(true) expect(child.$el.hasAttribute('data-2')).toBe(true) }).then(done) }) })