From 6bd26636c39a570942f1f4d38f3549ffc8184eb3 Mon Sep 17 00:00:00 2001 From: Cr <631807682@qq.com> Date: Mon, 14 Oct 2019 23:56:02 +0800 Subject: [PATCH] test: add test for resolveAsset (#273) --- .../__tests__/helpers/resolveAssets.spec.ts | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 packages/runtime-core/__tests__/helpers/resolveAssets.spec.ts diff --git a/packages/runtime-core/__tests__/helpers/resolveAssets.spec.ts b/packages/runtime-core/__tests__/helpers/resolveAssets.spec.ts new file mode 100644 index 000000000..77d616212 --- /dev/null +++ b/packages/runtime-core/__tests__/helpers/resolveAssets.spec.ts @@ -0,0 +1,94 @@ +import { + mockWarn, + createApp, + nodeOps, + resolveComponent, + resolveDirective, + Component, + Directive +} from '@vue/runtime-test' + +describe('resolveAssets', () => { + test('should work', () => { + const app = createApp() + const FooBar = () => null + const BarBaz = { mounted: () => null } + + let component1: Component + let component2: Component + let component3: Component + let component4: Component + let directive1: Directive + let directive2: Directive + let directive3: Directive + let directive4: Directive + + const Root = { + components: { + FooBar: FooBar + }, + directives: { + BarBaz: BarBaz + }, + setup() { + return () => { + component1 = resolveComponent('FooBar')! + directive1 = resolveDirective('BarBaz')! + // camelize + component2 = resolveComponent('Foo-bar')! + directive2 = resolveDirective('Bar-baz')! + // capitalize + component3 = resolveComponent('fooBar')! + directive3 = resolveDirective('barBaz')! + // camelize and capitalize + component4 = resolveComponent('foo-bar')! + directive4 = resolveDirective('bar-baz')! + } + } + } + + const root = nodeOps.createElement('div') + app.mount(Root, root) + expect(component1!).toBe(FooBar) + expect(component2!).toBe(FooBar) + expect(component3!).toBe(FooBar) + expect(component4!).toBe(FooBar) + + expect(directive1!).toBe(BarBaz) + expect(directive2!).toBe(BarBaz) + expect(directive3!).toBe(BarBaz) + expect(directive4!).toBe(BarBaz) + }) + + describe('warning', () => { + mockWarn() + + test('used outside render() or setup()', () => { + resolveComponent('foo') + expect( + 'resolveComponent can only be used in render() or setup().' + ).toHaveBeenWarned() + + resolveDirective('foo') + expect( + 'resolveDirective can only be used in render() or setup().' + ).toHaveBeenWarned() + }) + + test('not exist', () => { + const app = createApp() + const Root = { + setup() { + resolveComponent('foo') + resolveDirective('bar') + return () => null + } + } + + const root = nodeOps.createElement('div') + app.mount(Root, root) + expect('Failed to resolve component: foo').toHaveBeenWarned() + expect('Failed to resolve directive: bar').toHaveBeenWarned() + }) + }) +})