import { describe, it, expect } from 'vitest'; import { mount } from '@vue/test-utils'; import Layout from '../Layout'; import Header from '../Header'; import Content from '../Content'; import Aside from '../Aside'; import Footer from '../Footer'; const AXIOM = 'Tomorrow will be even better'; describe('Layout.vue', () => { it('Layout render test', () => { const wrapper = mount(Layout, { slots: { default: AXIOM, }, }); expect(wrapper.classes()).toContain('coast-layout'); expect(wrapper.text()).toEqual(AXIOM); }); it('Layout check for any aside', () => { const childHasAside = ` `; const childNotAside = ` `; const childEmpty = ''; const TestComponent = (templateChild: string) => ({ template: ` ${templateChild} `, components: { 'co-layout': Layout, 'co-header': Header, 'co-aside': Aside, 'co-content': Content, }, }); const hasAsideClassName = 'coast-layout-has-aside'; const wrapper1 = mount(TestComponent(childHasAside)); const LayoutComponent1 = wrapper1.findComponent(Layout); expect(LayoutComponent1.vm.$slots).toBeTruthy(); expect(LayoutComponent1.vm.$slots.default).toBeTruthy(); expect(LayoutComponent1.vm.$slots.default().length > 0).toBeTruthy(); expect(LayoutComponent1.findAllComponents(Aside).length > 0).toBeTruthy(); expect(wrapper1.classes()).toContain(hasAsideClassName); const wrapper2 = mount(TestComponent(childNotAside)); const LayoutComponent2 = wrapper2.findComponent(Layout); expect(LayoutComponent2.vm.$slots).toBeTruthy(); expect(LayoutComponent2.vm.$slots.default).toBeTruthy(); expect(LayoutComponent2.vm.$slots.default().length > 0).toBeTruthy(); expect(LayoutComponent2.findAllComponents(Aside).length > 0).toBeFalsy(); expect(wrapper2.classes()).not.toContain(hasAsideClassName); const wrapper3 = mount(TestComponent(childEmpty)); const LayoutComponent3 = wrapper3.findComponent(Layout); expect(LayoutComponent3.vm.$slots).toBeTruthy(); expect(LayoutComponent3.vm.$slots.default).toBeFalsy(); expect(LayoutComponent3.vm.$slots).toMatchObject({}); expect(wrapper3.classes()).not.toContain(hasAsideClassName); }); }); describe('Header', () => { it('create header', () => { const wrapper = mount(Header); expect(wrapper.classes()).toContain('coast-header'); }); it('header height', () => { const wrapper = mount(Header, { props: { height: '100px' } }); const vm = wrapper.vm; expect(vm.$el.style.height).toBe('100px'); }); }); describe('Aside', () => { it('aside create', () => { const wrapper = mount(Aside); expect(wrapper.classes()).toContain('coast-aside'); }); it('aside width', () => { const wrapper = mount(Aside, { props: { width: '200px' } }); const vm = wrapper.vm; expect(vm.$el.style.width).toEqual('200px'); }); }); describe('Content', () => { it('main create', () => { const wrapper = mount(Content); expect(wrapper.classes()).toContain('coast-content'); }); }); describe('Footer', () => { it('footer create', () => { const wrapper = mount(Footer); expect(wrapper.classes()).toContain('coast-footer'); }); it('footer height', () => { const wrapper = mount(Footer, { props: { height: '100px' } }); const vm = wrapper.vm; expect(vm.$el.style.height).toEqual('100px'); }); });