diff --git a/src/fileUtils.js b/src/fileUtils.js index 357cc18..a572424 100644 --- a/src/fileUtils.js +++ b/src/fileUtils.js @@ -24,7 +24,6 @@ export default { return new Promise((resolve, reject) => { const uploader = document.createElement('input') - uploader.id = 'file-uploader' uploader.type = 'file' uploader.accept = '.json' @@ -32,6 +31,7 @@ export default { const file = uploader.files[0] const reader = new FileReader() reader.onload = (e) => { + uploader.remove() resolve(e.target.result) } reader.readAsText(file) diff --git a/tests/unit/fileUtils.spec.js b/tests/unit/fileUtils.spec.js index 030c072..17d7e05 100644 --- a/tests/unit/fileUtils.spec.js +++ b/tests/unit/fileUtils.spec.js @@ -5,9 +5,6 @@ import sinon from 'sinon' describe('fileUtils.js', () => { afterEach(() => { document.createElement.restore() - URL.revokeObjectURL.restore() - URL.createObjectURL.restore() - window.Blob.restore() }) it('exportToFile (octet/stream by default)', () => { @@ -36,6 +33,10 @@ describe('fileUtils.js', () => { expect(spyAnchor.remove.calledOnce).to.equal(true) expect(URL.revokeObjectURL.calledOnceWith(url)).to.equal(true) + + URL.revokeObjectURL.restore() + URL.createObjectURL.restore() + window.Blob.restore() }) it('exportToFile', () => { @@ -64,5 +65,35 @@ describe('fileUtils.js', () => { expect(spyAnchor.remove.calledOnce).to.equal(true) expect(URL.revokeObjectURL.calledOnceWith(url)).to.equal(true) + + URL.revokeObjectURL.restore() + URL.createObjectURL.restore() + window.Blob.restore() + }) + + it('importFile', () => { + const spyInput = document.createElement('input') + sinon.spy(spyInput, 'click') + sinon.spy(spyInput, 'remove') + + const blob = new Blob(['foo']) + Object.defineProperty(spyInput, 'files', { + value: [blob], + writable: false, + }) + + sinon.stub(document, 'createElement').returns(spyInput) + + setTimeout(() => { spyInput.dispatchEvent(new Event('change')) }) + + return fu.importFile() + .then((data) => { + expect(data).to.equal('foo') + expect(document.createElement.calledOnceWith('input')).to.equal(true) + expect(spyInput.type).to.equal('file') + expect(spyInput.accept).to.equal('.json') + expect(spyInput.click.calledOnce).to.equal(true) + expect(spyInput.remove.calledOnce).to.equal(true) + }) }) })