55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
import Vue from 'vue';
|
|
import loadingIcon from '~/vue_shared/components/loading_icon.vue';
|
|
|
|
describe('Loading Icon Component', () => {
|
|
let LoadingIconComponent;
|
|
|
|
beforeEach(() => {
|
|
LoadingIconComponent = Vue.extend(loadingIcon);
|
|
});
|
|
|
|
it('should render a spinner font awesome icon', () => {
|
|
const component = new LoadingIconComponent().$mount();
|
|
|
|
expect(
|
|
component.$el.querySelector('i').getAttribute('class'),
|
|
).toEqual('fa fa-spin fa-spinner fa-1x');
|
|
|
|
expect(component.$el.tagName).toEqual('DIV');
|
|
expect(component.$el.classList).toContain('text-center');
|
|
expect(component.$el.classList).toContain('loading-container');
|
|
});
|
|
|
|
it('should render accessibility attributes', () => {
|
|
const component = new LoadingIconComponent().$mount();
|
|
|
|
const icon = component.$el.querySelector('i');
|
|
expect(icon.getAttribute('aria-hidden')).toEqual('true');
|
|
expect(icon.getAttribute('aria-label')).toEqual('Loading');
|
|
});
|
|
|
|
it('should render the provided label', () => {
|
|
const component = new LoadingIconComponent({
|
|
propsData: {
|
|
label: 'This is a loading icon',
|
|
},
|
|
}).$mount();
|
|
|
|
expect(
|
|
component.$el.querySelector('i').getAttribute('aria-label'),
|
|
).toEqual('This is a loading icon');
|
|
});
|
|
|
|
it('should render the provided size', () => {
|
|
const component = new LoadingIconComponent({
|
|
propsData: {
|
|
size: '2',
|
|
},
|
|
}).$mount();
|
|
|
|
expect(
|
|
component.$el.querySelector('i').classList.contains('fa-2x'),
|
|
).toEqual(true);
|
|
});
|
|
});
|