index.spec.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import Uploader from '..';
  2. import { mount, later } from '../../../test/utils';
  3. window.File = function () {
  4. this.size = 10000;
  5. };
  6. window.FileReader = function () {
  7. this.readAsText = function () {
  8. this.onload &&
  9. this.onload({
  10. target: {
  11. result: 'test'
  12. }
  13. });
  14. };
  15. this.readAsDataURL = this.readAsText;
  16. };
  17. const mockFile = new File([], '/Users');
  18. const file = { target: { files: [mockFile] } };
  19. const multiFile = { target: { files: [mockFile, mockFile] } };
  20. test('disabled', () => {
  21. const afterRead = jest.fn();
  22. const wrapper = mount(Uploader, {
  23. propsData: {
  24. disabled: true,
  25. afterRead
  26. }
  27. });
  28. wrapper.vm.onChange(file);
  29. expect(afterRead).toHaveBeenCalledTimes(0);
  30. });
  31. it('read text', done => {
  32. const wrapper = mount(Uploader, {
  33. propsData: {
  34. resultType: 'text',
  35. afterRead: readFile => {
  36. expect(readFile.content).toEqual('test');
  37. done();
  38. }
  39. }
  40. });
  41. wrapper.vm.onChange(file);
  42. });
  43. it('set input name', done => {
  44. const wrapper = mount(Uploader, {
  45. propsData: {
  46. name: 'uploader',
  47. beforeRead: (readFile, detail) => {
  48. expect(detail.name).toEqual('uploader');
  49. return true;
  50. },
  51. afterRead: (readFile, detail) => {
  52. expect(detail.name).toEqual('uploader');
  53. done();
  54. }
  55. }
  56. });
  57. wrapper.vm.onChange(file);
  58. });
  59. it('unknown resultType', () => {
  60. const afterRead = jest.fn();
  61. const wrapper = mount(Uploader, {
  62. propsData: {
  63. resultType: 'xxxx',
  64. afterRead
  65. }
  66. });
  67. wrapper.vm.onChange(file);
  68. expect(afterRead).toHaveBeenCalledTimes(0);
  69. });
  70. it('before read return false', () => {
  71. const afterRead = jest.fn();
  72. const wrapper = mount(Uploader, {
  73. propsData: {
  74. beforeRead: () => false,
  75. afterRead
  76. }
  77. });
  78. const input = wrapper.find('input');
  79. wrapper.vm.onChange(file);
  80. expect(afterRead).toHaveBeenCalledTimes(0);
  81. expect(input.element.value).toEqual('');
  82. });
  83. test('file size overlimit', async () => {
  84. const wrapper = mount(Uploader, {
  85. propsData: {
  86. maxSize: 1
  87. }
  88. });
  89. wrapper.vm.onChange(file);
  90. wrapper.vm.onChange(multiFile);
  91. await later();
  92. expect(wrapper.emitted('oversize')[0]).toBeTruthy();
  93. expect(wrapper.emitted('oversize')[1]).toBeTruthy();
  94. wrapper.vm.maxSize = 100000;
  95. wrapper.vm.onChange(multiFile);
  96. await later();
  97. expect(wrapper.emitted('oversize')[2]).toBeFalsy();
  98. });