diff --git a/src/components/timeline/Timeline.spec.js b/src/components/timeline/Timeline.spec.js
new file mode 100644
index 000000000..c5c9b422d
--- /dev/null
+++ b/src/components/timeline/Timeline.spec.js
@@ -0,0 +1,83 @@
+import { mount } from '@vue/test-utils';
+import Timeline from './Timeline.vue';
+
+describe('Timeline.vue', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = mount(Timeline, {
+ props: {
+ value: [
+ {status: 'Ordered', date: '15/10/2020 10:30', icon: 'pi pi-shopping-cart', color: '#9C27B0', image: 'game-controller.jpg'},
+ {status: 'Processing', date: '15/10/2020 14:00', icon: 'pi pi-cog', color: '#673AB7'},
+ {status: 'Shipped', date: '15/10/2020 16:15', icon: 'pi pi-shopping-cart', color: '#FF9800'},
+ {status: 'Delivered', date: '16/10/2020 10:00', icon: 'pi pi-check', color: '#607D8B'}
+ ]
+ },
+ slots: {
+ content: `
+
+ {{slotProps.item.status}}
+
+ `
+ }
+ });
+ });
+
+ it('should exist', () => {
+ expect(wrapper.find('.p-timeline.p-component').exists()).toBe(true);
+ expect(wrapper.find('.p-timeline').classes()).toContain('p-timeline-left');
+ expect(wrapper.find('.p-timeline').classes()).toContain('p-timeline-vertical');
+ expect(wrapper.findAll('.p-timeline-event-separator').length).toBe(4);
+ });
+
+ it('should align right', async () => {
+ await wrapper.setProps({ align: 'right' });
+
+ expect(wrapper.find('.p-timeline').classes()).toContain('p-timeline-right');
+ });
+
+ it('should horizontal layout', async () => {
+ await wrapper.setProps({ layout: 'horizontal' });
+
+ expect(wrapper.find('.p-timeline').classes()).toContain('p-timeline-horizontal');
+ });
+});
+
+describe('customized timeline', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = mount(Timeline, {
+ slots: {
+ opposite: `
+
+ {{slotProps.item.date}}
+
+ `,
+ marker: `
+
+
+
+
+
+ `
+ },
+ props: {
+ value: [
+ {status: 'Ordered', date: '15/10/2020 10:30', icon: 'pi pi-shopping-cart', color: '#9C27B0', image: 'game-controller.jpg'},
+ {status: 'Processing', date: '15/10/2020 14:00', icon: 'pi pi-cog', color: '#673AB7'},
+ {status: 'Shipped', date: '15/10/2020 16:15', icon: 'pi pi-shopping-cart', color: '#FF9800'},
+ {status: 'Delivered', date: '16/10/2020 10:00', icon: 'pi pi-check', color: '#607D8B'}
+ ]
+ }
+ });
+ });
+
+ it('should have templating', () => {
+ const firstItem = wrapper.findAll('.p-timeline-event')[0];
+
+ expect(firstItem.find('.p-text-secondary').text()).toBe('15/10/2020 10:30');
+ expect(firstItem.find('.custom-marker').attributes().style.backgroundColor).not.toBe('');
+ });
+});
\ No newline at end of file