54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
import { nextTick } from 'vue';
|
|
import { mount } from '@vue/test-utils';
|
|
import { describe, expect, test, vi } from 'vitest';
|
|
import ClickToCopyField from '@/components/ClickToCopyField.vue';
|
|
|
|
// Mocking clipboard API
|
|
let clipboardData = '';
|
|
Object.assign(window.navigator, {
|
|
clipboard: {
|
|
writeText: vi.fn(data => {
|
|
clipboardData = data;
|
|
return Promise.resolve();
|
|
}),
|
|
readText: vi.fn(() => clipboardData)
|
|
}
|
|
});
|
|
|
|
describe('ClickToCopyField Component', () => {
|
|
test('displays the passed text content', () => {
|
|
expect(ClickToCopyField).toBeTruthy();
|
|
|
|
const wrapper = mount(ClickToCopyField, {
|
|
props: {
|
|
textContent: 'Test'
|
|
}
|
|
});
|
|
|
|
expect(wrapper.html()).contains('Test');
|
|
});
|
|
|
|
test("let's us copy with a button click", async () => {
|
|
const $notify = vi.fn();
|
|
expect(ClickToCopyField).toBeTruthy();
|
|
|
|
const wrapper = mount(ClickToCopyField, {
|
|
props: {
|
|
textContent: 'Test'
|
|
},
|
|
global: {
|
|
mocks: {
|
|
$notify
|
|
}
|
|
}
|
|
});
|
|
|
|
wrapper.find('button').isVisible();
|
|
wrapper.find('button').trigger('click');
|
|
|
|
await nextTick();
|
|
|
|
expect(navigator.clipboard.readText()).toBe('Test');
|
|
});
|
|
});
|