import { mount } from '@vue/test-utils'; import { asyncExpect } from '@/tests/utils'; import Avatar from '..'; describe('Avatar Render', () => { it('Render long string correctly', () => { const wrapper = mount(Avatar, { slots: { default: 'TestString', }, }); const children = wrapper.findAll('.ant-avatar-string'); expect(children.length).toBe(1); }); it('should render fallback string correctly', async () => { global.document.body.innerHTML = ''; const wrapper = mount(Avatar, { slots: { default: 'Fallback', }, propsData: { src: 'http://error.url', }, sync: false, attachToDocument: true, }); wrapper.vm.setScale = jest.fn(() => { wrapper.setData({ scale: 0.5 }); wrapper.vm.$forceUpdate(); }); await asyncExpect(() => { wrapper.find('img').trigger('error'); }, 0); await asyncExpect(() => { const children = wrapper.findAll('.ant-avatar-string'); expect(children.length).toBe(1); expect(children.at(0).text()).toBe('Fallback'); expect(wrapper.vm.setScale).toBeCalled(); }); await asyncExpect(() => { expect(global.document.body.querySelector('.ant-avatar-string').style.transform).toContain( 'scale(0.5)', ); global.document.body.innerHTML = ''; }, 0); }); it('should handle onError correctly', () => { global.document.body.innerHTML = ''; const LOAD_FAILURE_SRC = 'http://error.url'; const LOAD_SUCCESS_SRC = 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png'; const Foo = { data() { return { src: LOAD_FAILURE_SRC, }; }, methods: { handleImgError() { this.src = LOAD_SUCCESS_SRC; return false; }, }, render() { const { src } = this; return ; }, }; const wrapper = mount(Foo, { attachToDocument: true }); // mock img load Error, since jsdom do not load resource by default // https://github.com/jsdom/jsdom/issues/1816 wrapper.find('img').trigger('error'); expect(wrapper.find({ name: 'AAvatar' }).vm.isImgExist).toBe(true); expect(global.document.body.querySelector('img').getAttribute('src')).toBe(LOAD_SUCCESS_SRC); }); });