From 2c0fb72bbc6223a808dc7b7bfd6f3f0cd9a7f4c1 Mon Sep 17 00:00:00 2001 From: HerringtonDarkholme <2883231+HerringtonDarkholme@users.noreply.github.com> Date: Sun, 2 Aug 2020 21:22:39 +0800 Subject: [PATCH] feat(core): add avatar test --- packages/__tests__/mock.ts | 3 + packages/avatar/__tests__/avatar.spec.ts | 75 ++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 packages/__tests__/mock.ts diff --git a/packages/__tests__/mock.ts b/packages/__tests__/mock.ts new file mode 100644 index 0000000000..ba9a4d31fe --- /dev/null +++ b/packages/__tests__/mock.ts @@ -0,0 +1,3 @@ +export const IMAGE_SUCCESS = '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'; + +export const IMAGE_FAIL = 'data:image/png;base64,fail'; diff --git a/packages/avatar/__tests__/avatar.spec.ts b/packages/avatar/__tests__/avatar.spec.ts index 2ec52a3232..efc3f8327c 100644 --- a/packages/avatar/__tests__/avatar.spec.ts +++ b/packages/avatar/__tests__/avatar.spec.ts @@ -1,15 +1,80 @@ import { mount } from '@vue/test-utils' +import { nextTick } from 'vue' import Avatar from '../src/index.vue' +import {IMAGE_SUCCESS, IMAGE_FAIL} from '../../__tests__/mock' -const AXIOM = 'Rem is the best girl' +beforeAll(() => { + Object.defineProperty(global.Image.prototype, 'src', { + set(src) { + const event = new Event( + src === IMAGE_FAIL ? 'error' : 'load' + ) + nextTick(() => this.dispatchEvent(event)) + }, + }) +}) describe('Avatar.vue', () => { test('render test', () => { + const wrapper = mount(Avatar) + expect(wrapper.find('.el-avatar').exists()).toBe(true) + }) + + test('size is number', () => { const wrapper = mount(Avatar, { - slots: { - default: AXIOM, - }, + props: { size: 50}, }) - expect(wrapper.text()).toEqual(AXIOM) + expect(wrapper.attributes('style')).toContain('height: 50px') + }) + + test('size is string', () => { + const wrapper = mount(Avatar, { + props: { size: 'small'}, + }) + expect(wrapper.classes()).toContain('el-avatar--small') + }) + + test('shape', () => { + const wrapper = mount(Avatar, { + props: { size: 'small', shape: 'square'}, + }) + expect(wrapper.classes()).toContain('el-avatar--square') + }) + + test('icon avatar', () => { + const wrapper = mount(Avatar, { + props: { icon: 'el-icon-user-solid'}, + }) + expect(wrapper.classes()).toContain('el-avatar--icon') + expect(wrapper.find('i').classes()).toContain('el-icon-user-solid') + }) + + test('image avatar', () => { + const wrapper = mount(Avatar, { + props: { src: IMAGE_SUCCESS}, + }) + expect(wrapper.find('img').exists()).toBe(true) + }) + + test('image fallback', async () => { + const wrapper = mount(Avatar, { + props: { src: IMAGE_FAIL}, + slots: {default: 'fallback'} + }) + await nextTick() + expect(wrapper.emitted('error')).toBeDefined() + await nextTick() + expect(wrapper.text()).toBe('fallback') + expect(wrapper.find('img').exists()).toBe(false) + }) + + test('image fit', () => { + const fits = ['fill', 'contain', 'cover', 'none', 'scale-down'] + for (let fit of fits) { + const wrapper = mount(Avatar, { + props: { fit, src: IMAGE_SUCCESS }, + }) + expect(wrapper.find('img').attributes('style')).toContain(`object-fit: ${fit};`) + } }) })