diff --git a/packages/uploader/test/index.spec.js b/packages/uploader/test/index.spec.js new file mode 100644 index 000000000..15358e9b0 --- /dev/null +++ b/packages/uploader/test/index.spec.js @@ -0,0 +1,95 @@ +import Uploader from '..'; +import { mount } from '@vue/test-utils'; + +window.File = function() { + this.size = 10000; +}; + +window.FileReader = function() { + this.readAsDataURL = this.readAsText = function() { + this.onload && + this.onload({ + target: { + result: 'test' + } + }); + }; +}; + +const mockFile = new File([], '/Users'); +const file = { target: { files: [mockFile] }}; +const multiFile = { target: { files: [mockFile, mockFile] }}; + +test('disabled', () => { + const afterRead = jest.fn(); + const wrapper = mount(Uploader, { + propsData: { + disabled: true, + afterRead + } + }); + + wrapper.vm.onChange(file); + expect(afterRead.mock.calls.length).toBeFalsy(); +}); + +it('read text', done => { + const wrapper = mount(Uploader, { + propsData: { + resultType: 'text', + afterRead: file => { + expect(file.content).toEqual('test'); + done(); + } + } + }); + + wrapper.vm.onChange(file); +}); + +it('unknown resultType', () => { + const afterRead = jest.fn(); + const wrapper = mount(Uploader, { + propsData: { + resultType: 'xxxx', + afterRead + } + }); + wrapper.vm.onChange(file); + expect(afterRead.mock.calls.length).toBeFalsy(); +}); + +it('before read return false', () => { + const afterRead = jest.fn(); + const wrapper = mount(Uploader, { + propsData: { + beforeRead: () => false, + afterRead + } + }); + + wrapper.vm.onChange(file); + expect(afterRead.mock.calls.length).toBeFalsy(); +}); + +test('file size overlimit', done => { + const wrapper = mount(Uploader, { + propsData: { + maxSize: 1 + } + }); + wrapper.vm.onChange(file); + wrapper.vm.onChange(multiFile); + + setTimeout(() => { + expect(wrapper.emitted('oversize')[0]).toBeTruthy(); + expect(wrapper.emitted('oversize')[1]).toBeTruthy(); + + wrapper.vm.maxSize = 100000; + wrapper.vm.onChange(multiFile); + setTimeout(() => { + expect(wrapper.emitted('oversize')[2]).toBeFalsy(); + done(); + }); + }); +});