vant/test/unit/specs/uploader.spec.js

138 lines
2.9 KiB
JavaScript

import Uploader from 'packages/uploader';
import { mount } from 'avoriaz';
window.File = function() {
this.name = 'test';
this.size = 10000;
};
window.FileReader = function() {
this.readAsDataURL = this.readAsText = function() {
this.onload && this.onload({
target: {
result: 'test'
}
});
};
};
const mockFile = new File([], '/Users');
describe('Uploader', () => {
let wrapper;
afterEach(() => {
wrapper && wrapper.destroy();
});
it('disabled', () => {
const afterRead = sinon.spy();
wrapper = mount(Uploader, {
propsData: {
disabled: true,
afterRead
}
});
expect(wrapper.contains('input')).to.equal(true);
wrapper.vm.onChange({ target: { files: [] }});
expect(afterRead.calledOnce).to.be.false;
});
it('before read', () => {
const afterRead = sinon.spy();
wrapper = mount(Uploader, {
propsData: {
beforeRead: () => false,
afterRead
}
});
wrapper.vm.onChange({ target: { files: [mockFile] }});
expect(afterRead.calledOnce).to.be.false;
});
it('read text', done => {
wrapper = mount(Uploader, {
propsData: {
resultType: 'text',
afterRead: (file) => {
expect(file.content).to.equal('test');
done();
}
}
});
wrapper.vm.onChange({ target: { files: [mockFile] }});
});
it('read dataUrl', done => {
wrapper = mount(Uploader, {
propsData: {
afterRead: (file) => {
expect(file.content).to.equal('test');
done();
}
}
});
wrapper.vm.onChange({ target: { files: [mockFile] }});
});
it('unknown resultType', () => {
const afterRead = sinon.spy();
wrapper = mount(Uploader, {
propsData: {
resultType: 'xxxx',
afterRead
}
});
wrapper.vm.onChange({ target: { files: [mockFile] }});
expect(afterRead.calledOnce).to.be.false;
});
it('read multiple files', done => {
wrapper = mount(Uploader, {
propsData: {
afterRead: (file) => {
expect(file.length).to.equal(2);
done();
}
}
});
wrapper.vm.onChange({ target: { files: [mockFile, mockFile] }});
});
it('size overlimit', done => {
const spy = sinon.spy();
wrapper = mount(Uploader, {
propsData: {
maxSize: 1
}
});
wrapper.vm.$on('oversize', spy);
wrapper.vm.onChange({ target: { files: [mockFile] }});
setTimeout(() => {
expect(spy.calledOnce).to.be.true;
done();
}, 50);
});
it('multi file size overlimit', done => {
const spy = sinon.spy();
wrapper = mount(Uploader, {
propsData: {
maxSize: 1
}
});
wrapper.vm.$on('oversize', spy);
wrapper.vm.onChange({ target: { files: [mockFile, mockFile] }});
setTimeout(() => {
expect(spy.calledOnce).to.be.true;
done();
}, 50);
});
});