2014-09-17 13:32:05 +08:00
|
|
|
var _ = require('../../../../src/util')
|
|
|
|
var Vue = require('../../../../src/vue')
|
|
|
|
|
|
|
|
if (_.inBrowser) {
|
|
|
|
describe('v-ref', function () {
|
|
|
|
|
|
|
|
var el
|
|
|
|
beforeEach(function () {
|
|
|
|
el = document.createElement('div')
|
|
|
|
spyOn(_, 'warn')
|
|
|
|
})
|
|
|
|
|
|
|
|
var components = {
|
|
|
|
test: {
|
|
|
|
id: 'test'
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
it('normal', function () {
|
|
|
|
var vm = new Vue({
|
|
|
|
el: el,
|
|
|
|
components: components,
|
|
|
|
template: '<div v-component="test" v-ref="test"></div>'
|
|
|
|
})
|
|
|
|
expect(vm.$.test).toBeTruthy()
|
|
|
|
expect(vm.$.test.$options.id).toBe('test')
|
|
|
|
vm.$.test.$destroy()
|
2014-10-20 07:32:36 +08:00
|
|
|
expect(vm.$.test).toBeUndefined()
|
2014-09-17 13:32:05 +08:00
|
|
|
})
|
|
|
|
|
|
|
|
it('with v-repeat', function (done) {
|
|
|
|
var vm = new Vue({
|
|
|
|
el: el,
|
|
|
|
data: { items: [1,2,3,4,5] },
|
|
|
|
template: '<div v-repeat="items" v-ref="test"></div>'
|
|
|
|
})
|
|
|
|
expect(vm.$.test).toBeTruthy()
|
|
|
|
expect(Array.isArray(vm.$.test)).toBe(true)
|
|
|
|
expect(vm.$.test[0].$value).toBe(1)
|
|
|
|
expect(vm.$.test[4].$value).toBe(5)
|
|
|
|
vm.items = []
|
|
|
|
_.nextTick(function () {
|
|
|
|
expect(vm.$.test.length).toBe(0)
|
2014-09-19 04:07:42 +08:00
|
|
|
vm._directives[0].unbind()
|
|
|
|
expect(vm.$.test).toBeUndefined()
|
2014-09-17 13:32:05 +08:00
|
|
|
done()
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2014-10-15 01:04:05 +08:00
|
|
|
it('nested v-repeat', function () {
|
|
|
|
var vm = new Vue({
|
|
|
|
el: el,
|
|
|
|
template: '<div v-component="c1" v-ref="c1"><div v-repeat="2" v-ref="c2"></div></div>',
|
|
|
|
components: { c1: {} }
|
|
|
|
})
|
|
|
|
expect(vm.$.c1 instanceof Vue).toBe(true)
|
|
|
|
expect(vm.$.c2).toBeUndefined()
|
|
|
|
expect(Array.isArray(vm.$.c1.$.c2)).toBe(true)
|
|
|
|
expect(vm.$.c1.$.c2.length).toBe(2)
|
|
|
|
})
|
|
|
|
|
2014-09-17 13:32:05 +08:00
|
|
|
it('warn on non-root', function () {
|
|
|
|
var vm = new Vue({
|
|
|
|
el: el,
|
|
|
|
template: '<div v-ref="test"></div>'
|
|
|
|
})
|
|
|
|
expect(_.warn).toHaveBeenCalled()
|
|
|
|
})
|
|
|
|
|
|
|
|
})
|
|
|
|
}
|