diff --git a/packages/core/useTitle/index.test.ts b/packages/core/useTitle/index.test.ts new file mode 100644 index 00000000000..6f9e22ef51b --- /dev/null +++ b/packages/core/useTitle/index.test.ts @@ -0,0 +1,91 @@ +import { computed, ref } from 'vue-demi' +import { useTitle } from '.' + +describe('useTitle', () => { + it('throws error when using both `observe` and `titleTemplate`', () => { + expect(() => { + useTitle(null, { observe: true, titleTemplate: '%s' }) + }).toThrowErrorMatchingInlineSnapshot('"Cannot use `observe` and `titleTemplate` together."') + }) + + it('without param', () => { + const title = useTitle() + expect(title.value).toEqual('') + title.value = 'new title' + expect(title.value).toEqual('new title') + }) + + describe('with writable param', () => { + it('string', () => { + const title = useTitle('old title') + expect(title.value).toEqual('old title') + title.value = 'new title' + expect(title.value).toEqual('new title') + }) + + it('null', () => { + const title = useTitle(null) + expect(title.value).toEqual('') + title.value = 'new title' + expect(title.value).toEqual('new title') + }) + + it('undefined', () => { + const title = useTitle(undefined) + expect(title.value).toEqual('') + title.value = 'new title' + expect(title.value).toEqual('new title') + }) + + describe('ref param', () => { + it('string', () => { + const targetRef = ref('old title') + const title = useTitle(targetRef) + expect(title.value).toEqual('old title') + targetRef.value = 'new title' + expect(title.value).toEqual('new title') + title.value = 'latest title' + expect(title.value).toEqual('latest title') + }) + + it('null', () => { + const targetRef = ref(null) + const title = useTitle(targetRef) + expect(title.value).toEqual(null) + targetRef.value = 'new title' + expect(title.value).toEqual('new title') + title.value = 'latest title' + expect(title.value).toEqual('latest title') + }) + + it('undefined', () => { + const targetRef = ref(undefined) + const title = useTitle(targetRef) + expect(title.value).toEqual(undefined) + targetRef.value = 'new title' + expect(title.value).toEqual('new title') + title.value = 'latest title' + expect(title.value).toEqual('latest title') + }) + }) + }) + + describe('with readonly param', () => { + it('computed', () => { + const condition = ref(false) + const target = computed(() => condition.value ? 'new title' : 'old title') + const title = useTitle(target) + expect(title.value).toEqual('old title') + condition.value = true + expect(title.value).toEqual('new title') + // title.value = '' // typed error + }) + + it('function', () => { + const target = () => 'new title' + const title = useTitle(target) + expect(title.value).toEqual('new title') + // title.value = '' // typed error + }) + }) +})