import { assertCode, compileSFCScript as compile } from '../utils' describe('defineOptions()', () => { test('basic usage', () => { const { content } = compile(` `) assertCode(content) // should remove defineOptions import and call expect(content).not.toMatch('defineOptions') // should include context options in default export expect(content).toMatch( `export default /*@__PURE__*/Object.assign({ name: 'FooApp' }, `, ) }) test('empty argument', () => { const { content } = compile(` `) assertCode(content) expect(content).toMatch(`export default {`) // should remove defineOptions import and call expect(content).not.toMatch('defineOptions') }) it('should emit an error with two defineOptions', () => { expect(() => compile(` `), ).toThrowError('[@vue/compiler-sfc] duplicate defineOptions() call') }) it('should emit an error with props or emits property', () => { expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare props. Use defineProps() instead.', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare emits. Use defineEmits() instead.', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare expose. Use defineExpose() instead.', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare slots. Use defineSlots() instead.', ) }) it('should emit an error with type generic', () => { expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot accept type arguments', ) }) it('should emit an error with type assertion', () => { expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare props. Use defineProps() instead.', ) }) it('should emit an error with declaring props/emits/slots/expose', () => { expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare props. Use defineProps() instead', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare emits. Use defineEmits() instead', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare expose. Use defineExpose() instead', ) expect(() => compile(` `), ).toThrowError( '[@vue/compiler-sfc] defineOptions() cannot be used to declare slots. Use defineSlots() instead', ) }) })