DigitalConsumer.ISS/src/digital-components/dropdown-question/dropdown-question.spec.js

159 lines
4.5 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { shallowMount } from '@vue/test-utils';
import dropdownQuestion from './dropdown-question';
// Mock CMS content
const questionText = 'Question Text';
const mockMixin = {
methods: {
getCmsContent: jest.fn().mockImplementation(() => questionText)
}
}
// TODO: Remove the following from dropdown-question.vue -> :class="(errors && errors.length) || hasError ? 'has-error' : ''"
// It is not being used.
describe('dropdownQuestion.vue', () => {
it('Should render a select input', async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {}
},
mixins: [mockMixin]
});
wrapper.getCmsContent = jest.fn();
// Act
const select = wrapper.find('select');
// Assert
expect(select.exists()).toBe(true);
});
it("Should render the 'questionText' data value as the label text.", async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {}
},
mixins: [mockMixin]
});
// Act
const label = wrapper.find('label');
// Assert
expect(label.text()).toContain(questionText);
});
it("Should render the 'questionText' data value with '⁠' after the first character of each word in the label text when disableAutoFill is true.", async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {},
disableAutoFill: true
},
mixins: [mockMixin]
});
// Mock CMS content ...
// Trust me, the below instance of the string "Question Text"
// actually has the & NoBreak; in it.You just can't see it
// Don't believe me? Copy and paste it into Google.
// Then inspect the search field element in Dev Tools,
// you will see "Q⁠uestion T⁠ext"
const expectedQuestionText = 'Question Text';
// Act
const label = wrapper.find('label');
// Assert
expect(label.text()).toContain(expectedQuestionText);
});
it('Should return input id as the id of the select field', async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
inputId: 'input ID',
options: {}
},
mixins: [mockMixin]
});
// Act
const select = wrapper.find('select');
// Assert
expect(select.attributes().id).toEqual('input ID');
});
it("Should render the 'questionText' data value as the aria-label attribute.", async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {}
},
mixins: [mockMixin]
});
// Act
const label = wrapper.find('label');
// Assert
expect(label.attributes('aria-label')).toContain(questionText);
});
it('Should return aria-disabled state as disabled', async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {},
isDisabled: true
},
mixins: [mockMixin]
});
// Act
const select = wrapper.find('select');
// Assert
expect(select.attributes('aria-disabled')).toEqual('true');
});
it('Should emit new value when modelValue is changed', async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {},
modelValue: 'val'
},
mixins: [mockMixin]
});
// Act
await wrapper.find('select').setValue('val2');
// Assert
expect(wrapper.emitted()).toHaveProperty('change');
});
it('Should call this.handleChange with new value when selectedOption is changed', async () => {
// Arrange
const wrapper = shallowMount(dropdownQuestion, {
propsData: {
options: {},
modelValue: '0'
},
mixins: [mockMixin]
});
wrapper.vm.handleChange = jest.fn().mockImplementation(() => {});
// Act
wrapper.vm.$options.watch.selectedOption.call(wrapper.vm, 1);
// Assert
expect(wrapper.vm.handleChange).toHaveBeenCalled;
});
});