diff --git a/karma.conf.js b/karma.conf.js index 22ad352..826ddf3 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -126,7 +126,7 @@ module.exports = function (config) { { test: /\.js$/, include: /src/, - exclude: /(node_modules|bower_components|\.spec\.js$|\/file)/, + exclude: /(node_modules|bower_components|\.spec\.js$)/, use: [ { loader: 'istanbul-instrumenter-loader', diff --git a/src/fileUtilities.js b/src/fileUtils.js similarity index 100% rename from src/fileUtilities.js rename to src/fileUtils.js diff --git a/src/views/MyQueries.vue b/src/views/MyQueries.vue index f254270..bfba81d 100644 --- a/src/views/MyQueries.vue +++ b/src/views/MyQueries.vue @@ -157,7 +157,7 @@ import TextField from '@/components/TextField' import CheckBox from '@/components/CheckBox' import tooltipMixin from '@/mixins/tooltips' import storedQueries from '@/storedQueries' -import fu from '@/fileUtilities' +import fu from '@/fileUtils' export default { name: 'MyQueries', diff --git a/tests/unit/fileUtils.spec.js b/tests/unit/fileUtils.spec.js new file mode 100644 index 0000000..dd51ab8 --- /dev/null +++ b/tests/unit/fileUtils.spec.js @@ -0,0 +1,70 @@ +import { expect } from 'chai' +import fu from '@/fileUtils.js' +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)', () => { + const spyAnchor = document.createElement('a') + sinon.spy(spyAnchor, 'click') + sinon.spy(spyAnchor, 'remove') + sinon.stub(document, 'createElement').returns(spyAnchor) + sinon.spy(URL, 'createObjectURL') + sinon.spy(URL, 'revokeObjectURL') + sinon.spy(window, 'Blob') + + const str = 'foo' + fu.exportToFile('foo','foo.txt') + + expect(document.createElement.calledOnceWith('a')).to.equal(true) + + expect(window.Blob.calledOnceWith(['foo'], { type: 'octet/stream' })).to.equal(true) + const blob = window.Blob.returnValues[0] + expect(URL.createObjectURL.calledOnceWith(blob)).to.equal(true) + + const url = URL.createObjectURL.returnValues[0] + expect(spyAnchor.href).to.equal(url) + + expect(spyAnchor.download).to.equal('foo.txt') + + expect(spyAnchor.click.calledOnce).to.equal(true) + + expect(spyAnchor.remove.calledOnce).to.equal(true) + expect(URL.revokeObjectURL.calledOnceWith(url)).to.equal(true) + }), + + it('exportToFile', () => { + const spyAnchor = document.createElement('a') + sinon.spy(spyAnchor, 'click') + sinon.spy(spyAnchor, 'remove') + sinon.stub(document, 'createElement').returns(spyAnchor) + sinon.spy(URL, 'createObjectURL') + sinon.spy(URL, 'revokeObjectURL') + sinon.spy(window, 'Blob') + + const str = 'foo' + fu.exportToFile('foo','foo.html', 'text/html') + + expect(document.createElement.calledOnceWith('a')).to.equal(true) + + expect(window.Blob.calledOnceWith(['foo'], { type: 'text/html' })).to.equal(true) + const blob = window.Blob.returnValues[0] + expect(URL.createObjectURL.calledOnceWith(blob)).to.equal(true) + + const url = URL.createObjectURL.returnValues[0] + expect(spyAnchor.href).to.equal(url) + + expect(spyAnchor.download).to.equal('foo.html') + + expect(spyAnchor.click.calledOnce).to.equal(true) + + expect(spyAnchor.remove.calledOnce).to.equal(true) + expect(URL.revokeObjectURL.calledOnceWith(url)).to.equal(true) + }) +})