image.spec.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import { createTest, createVue, destroyVM, wait } from '../util';
  2. import Image from 'packages/image';
  3. const src = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFmklEQVR4Xu2ba2wUVRTH/2cWtlaooFQwKpr4CkESTQBNUAkodGeaKFGD2u6WGPyAmmAEEZmpj1VhBghE/KKGBIztDIXAByWBnQ1oQREfARNiDDHiF1+ooBiksVt295hFiqSdxx3KdmcH5uv+z+3//O65c19TwgX+0AWePy4CuFgBISCQ3J6+DFLuVQKmg2k4gK3xuvwr6+9e+Xe57YViCCRttY1ALX2S/asIPLRB1jvLCSEUAFK2egKgYf0T5a6TxdhtmxqXfl8uCBUHMHfP4rqeE0OOeyS4w5T1hsgCmLNTvaWYp299EpxoyvpX5YBQ8QpotlvvkMBfeCbHvMpUjOejCSCjPSYROrySY/B+SzYmRRJA0tZWEfCcJwBGz81yvDZN6eL5hlDxIZCyta8BTPBLjIv5sVbjyp/8dEF/ryiAlL3kJkD6TsQ0STS5vWHZPhFtEE1FAYiUf28yBaZ7OpRle4IkJ6KtGIDZexfU1hyv/QXASBGjBeYpHYrxmYg2iKZiAFIZdSGIVouaLVJx0obE8v2ielFdRQA83pkemc/lDgE0StRopF6CSVuzCGgWTb6ku7T+aHztpLUng8SIaAe9ApJ265MEflvE3P8a/t2UjTHBYsTUgwqgKauOk4p0gAhxMXunVcwfmYpxX6AYQfGgAWjqTNdL3bndRDRe0NsZGYPXWLKxIGiciH5QAJye8r4UWfE5mWbCE1ZCXy+SUFBN2QEo2+fXjKK6zSDcH9Rcr55i0vj2mUsPnmu8V1xZAZxKXhq+G6A7z9U8Mx+zFOOKc433iysbgNKYj3XnNoHoXj8T3r/z+6ZsPDiwNtyjHQE07dTGSAU8QkX4LlSY6Ndh9UfWnT1Ht2QXjeZifC8INw7UOAMfE2MgB6NdhaFo65ih/+bkxRFAMqPuIaK7xM3zu6ZszO3Vt2S1CcwobXPD8TAfoZjU6LSb7AdgWmd6yLW5nqArrm5T1mtDC+A/Y3tNWe/XqY4VkLK1fwBcItp9DGZLNqQwA2DmgiUbQ0Hgs/NyBpBRD4PoqigBKOWSGxuv2XxruscXQNJWDxJoXJQAMPCnJev9XuouQ0D9PMjcXQ1DAIx9pqJP7tupLrOAZhMhEaUKAGOjqehNYgBsdSOBHo0UAOBlU9ZfFwOQUd8honmRAsA8y1SMrWIAbHUFgRZHCUCe6LqNiWU/igHIaCoR9KgAYMZRS9GvFF4Kp7LqU2B6KzoAeKulGLOEASRtrZkAK0IAVEsxlgsDaM6ojRLRtqgAIImntTcYu4UBpLKtU8D8aRQAMJD/uSZeu2t6Oi8MILldHU8SfRMFAG67wN7cHFeCcz5svaZ4koWvosO9FGbdlI1Wt850BNCSXTSMOX4iEhVAaDAT+o5AAEriVEYrgHBmj+8FI7QVwJzLjei+fPOUN0rnG46P66FoMqMdIUK9SBWEGIDvjZIrgFRGOyR6qBlWAMzQLEU3vDrRvQJsdR+BJlZzBYh8VuM1BHYSQehCMpwVwF1mwqjrewYotBk69RK0tS0AHq7eChC7UPEYAto6As6c9VfdLED8tJkwfL9DcH8J2upqgBZWbwXgalPWD/v59wCgvQTgNb8GSr+H7x3AB0zZuF3EuyuA5oz6jET0pkgjYQPAzEstxSh1oO/jVQFzALzn20IIK0CKFa5vm7niBxHvHgsh9QEQfSDSSP8KWDSaOe54GyvS3sA0vMuUjemibbgPgWzrVInZ8RChb+N9AQSdRkXNiul4qikbn4hp4f5/g7N3vDAiXpCOEcj/IwpG0VT02Nl/9NSOshjvGMinMaJJ9OqYeYulGLODxHkml7TVZ8GYT0Q3uDfKXQxaY8n6i06aZnvJDGKaB8JMAo0IYk5UW7r5BbAtNhRz22YYf4jGlXT+vRuktSrUXgRQhZ12Xi1f8BXwL38cy1+mrtJNAAAAAElFTkSuQmCC';
  4. describe('Image', () => {
  5. let vm;
  6. afterEach(() => {
  7. destroyVM(vm);
  8. });
  9. it('create', async() => {
  10. vm = createTest(Image, {
  11. src,
  12. fit: 'fill'
  13. }, true);
  14. const placeholder = vm.$el.querySelector('.el-image__placeholder');
  15. const error = vm.$el.querySelector('.el-image__error');
  16. let img = vm.$el.querySelector('.el-image__inner');
  17. expect(placeholder).to.exist;
  18. expect(error).to.be.null;
  19. expect(img).to.be.null;
  20. await wait();
  21. img = vm.$el.querySelector('.el-image__inner');
  22. expect(img.style.objectFit).to.equal('fill');
  23. });
  24. it('load failed', async() => {
  25. vm = createTest(Image, true);
  26. await wait();
  27. const error = vm.$el.querySelector('.el-image__error');
  28. expect(error).to.be.exist;
  29. });
  30. it('lazy load', async() => {
  31. vm = createVue({
  32. template: `
  33. <div ref="wrapper" style="height: 200px; overflow: auto;">
  34. <el-image
  35. v-for="item in 2"
  36. :key="item"
  37. :src="src"
  38. ref="image"
  39. style="display: block; height: 200px;"
  40. lazy></el-image>
  41. </div>
  42. `,
  43. data() {
  44. return {
  45. src
  46. };
  47. }
  48. }, true);
  49. const { image, wrapper } = vm.$refs;
  50. const [image1, image2] = image;
  51. await wait();
  52. expect(image1.loading).to.be.false;
  53. expect(image2.loading).to.be.true;
  54. wrapper.scrollTop = 10;
  55. await wait();
  56. expect(image2.loading).to.be.false;
  57. });
  58. it('$attrs', async() => {
  59. vm = createVue({
  60. template: `
  61. <el-image
  62. alt="$attrs test"
  63. referrerpolicy="origin"
  64. :src="src"></el-image>
  65. `,
  66. data() {
  67. return {
  68. src
  69. };
  70. }
  71. }, true);
  72. await wait();
  73. const $img = vm.$el.querySelector('.el-image__inner');
  74. expect($img.getAttribute('alt')).to.be.equal('$attrs test');
  75. expect($img.getAttribute('referrerpolicy')).to.be.equal('origin');
  76. });
  77. it('pass event listeners', async() => {
  78. let result;
  79. vm = createVue({
  80. template: `
  81. <el-image @click="handleClick" :src="src"></el-image>
  82. `,
  83. data() {
  84. return {
  85. src
  86. };
  87. },
  88. methods: {
  89. handleClick(e) {
  90. result = e;
  91. }
  92. }
  93. }, true);
  94. await wait();
  95. vm.$el.querySelector('.el-image__inner').click();
  96. await wait();
  97. expect(result).to.exist;
  98. });
  99. });