vue2/test/unit/specs/directives/ref_spec.js

71 lines
1.8 KiB
JavaScript
Raw Normal View History

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()
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()
})
})
}