expect(root.children[0]).toBe(el)
// node should not have been updated yet
- // expect(el.children[0].text).toBe(`${count.value - 1}`)
+ expect(el.children[0].text).toBe(`${count.value - 1}`)
assertBindings(binding)
render(h(App), root)
expect(res!).toBe('Test')
})
+
+ test('should not throw with unknown directive', async () => {
+ const d1 = {
+ mounted: jest.fn()
+ }
+ const App = {
+ name: 'App',
+ render() {
+ // simulates the code generated on an unknown directive
+ return withDirectives(h('div'), [
+ [undefined],
+ [d1]
+ ])
+ }
+ }
+
+ const root = nodeOps.createElement('div')
+ render(h(App), root)
+ expect(d1.mounted).toHaveBeenCalled()
+ })
})
// Directive, value, argument, modifiers
export type DirectiveArguments = Array<
- | [Directive]
- | [Directive, any]
- | [Directive, any, string]
- | [Directive, any, string, DirectiveModifiers]
+ | [Directive | undefined]
+ | [Directive | undefined, any]
+ | [Directive | undefined, any, string]
+ | [Directive | undefined, any, string, DirectiveModifiers]
>
/**
const bindings: DirectiveBinding[] = vnode.dirs || (vnode.dirs = [])
for (let i = 0; i < directives.length; i++) {
let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]
- if (isFunction(dir)) {
- dir = {
- mounted: dir,
- updated: dir
- } as ObjectDirective
+ if (dir) {
+ if (isFunction(dir)) {
+ dir = {
+ mounted: dir,
+ updated: dir
+ } as ObjectDirective
+ }
+ if (dir.deep) {
+ traverse(value)
+ }
+ bindings.push({
+ dir,
+ instance,
+ value,
+ oldValue: void 0,
+ arg,
+ modifiers
+ })
}
- if (dir.deep) {
- traverse(value)
- }
- bindings.push({
- dir,
- instance,
- value,
- oldValue: void 0,
- arg,
- modifiers
- })
}
return vnode
}