diff --git a/.eslintignore b/.eslintignore index 73b26aa6..0d1468db 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ dist/*.js !.eslintrc.js +tests/unit/coverage diff --git a/.travis.yml b/.travis.yml index e40b6e45..461f44b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,16 +6,12 @@ cache: node_js: - "10" - "8" - - "6" - -before_install: - - npm i -g npm@">=4.0.0" install: - npm install script: - - npm test + - npm run test:unit deploy: provider: npm diff --git a/babel.config.js b/babel.config.js index fdf8d343..4d3e9eea 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,4 +1,4 @@ module.exports = { presets: ["@vue/app"], - plugins: ["lodash"] + plugins: ["lodash", "istanbul"] }; diff --git a/package.json b/package.json index e8ef9bf4..4ad8dcef 100644 --- a/package.json +++ b/package.json @@ -11,8 +11,8 @@ "build:core": "cross-env VUE_APP_FULL_BUNDLE=false vue-cli-service build --no-clean --target lib --name vfg-core src/index.js --report", "build:full": "cross-env VUE_APP_FULL_BUNDLE=true vue-cli-service build --no-clean --target lib --name vfg src/index.js --report", "lint": "vue-cli-service lint", - "test:unit": "vue-cli-service test:unit --include ./tests/unit/setup.js", - "coverall": "cat ./test/unit/coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "test:unit": "nyc vue-cli-service test:unit --include ./tests/unit/setup.js", + "coverall": "cat ./tests/unit/coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", "changelog": "conventional-changelog -i CHANGELOG.md -s", "changelog:full": "conventional-changelog -i CHANGELOG.md -s -r 0", "docs": "cd docs && gitbook serve", @@ -56,15 +56,15 @@ "license": "MIT", "dependencies": {}, "devDependencies": { - "@vue/cli-plugin-babel": "3.0.4", - "@vue/cli-plugin-eslint": "3.0.4", - "@vue/cli-plugin-unit-mocha": "3.0.4", - "@vue/cli-service": "3.0.4", - "@vue/eslint-config-prettier": "3.0.4", + "@vue/cli-plugin-babel": "3.0.5", + "@vue/cli-plugin-eslint": "3.0.5", + "@vue/cli-plugin-unit-mocha": "3.0.5", + "@vue/cli-service": "3.0.5", + "@vue/eslint-config-prettier": "3.0.5", "@vue/test-utils": "1.0.0-beta.25", - "babel-plugin-istanbul": "5.0.1", + "babel-plugin-istanbul": "5.1.0", "babel-plugin-lodash": "3.3.4", - "bumped": "0.10.10", + "bumped": "0.10.11", "chai": "4.2.0", "cleave.js": "1.4.4", "conventional-changelog-cli": "2.0.5", @@ -77,12 +77,12 @@ "istanbul-instrumenter-loader": "3.0.1", "jquery": "3.3.1", "lodash-webpack-plugin": "0.11.5", - "node-sass": "4.9.3", + "node-sass": "4.9.4", "nouislider": "11.1.0", - "nyc": "13.0.1", + "nyc": "13.1.0", "pikaday": "1.7.0", "sass-loader": "7.1.0", - "sinon": "6.3.5", + "sinon": "7.0.0", "vue": "2.5.17", "vue-highlightjs": "1.3.3", "vue-markdown": "2.2.4", @@ -203,7 +203,7 @@ "arrowParens": "always" }, "nyc": { - "check-coverage": true, + "check-coverage": false, "per-file": true, "include": [ "src/**/*.{js,vue}" @@ -216,10 +216,11 @@ ], "reporter": [ "lcov", - "text" + "text", + "text-summary" ], "report-dir": "./tests/unit/coverage", - "temp-directory": "./tests/unit/coverage/.nyc_output", + "temp-dir": "./tests/unit/coverage/.nyc_output", "cache": true, "all": true }, diff --git a/src/fields/core/fieldUpload.vue b/src/fields/core/fieldUpload.vue index 45c6c2a5..b609a427 100644 --- a/src/fields/core/fieldUpload.vue +++ b/src/fields/core/fieldUpload.vue @@ -25,9 +25,9 @@ export default { mixins: [abstractField], methods: { onChange($event) { - if (isFunction(this.schema.onChanged)) { + if (isFunction(this.fieldOptions.onChanged)) { // Schema has defined onChange method. - this.schema.onChanged.call(this, this.model, this.schema, $event, this); + this.fieldOptions.onChanged.call(this, this.model, this.schema, $event, this); } } } diff --git a/tests/unit/specs/fields/fieldUpload.spec.js b/tests/unit/specs/fields/fieldUpload.spec.js index 731a061f..06e09389 100644 --- a/tests/unit/specs/fields/fieldUpload.spec.js +++ b/tests/unit/specs/fields/fieldUpload.spec.js @@ -84,4 +84,36 @@ describe("fieldUpload.vue", () => { }); }); }); + describe("check onChange methods", () => { + let schema = { + type: "upload", + label: "Upload", + inputName: "testupload", + placeholder: "", + readonly: false, + required: false, + disabled: false, + fieldOptions: { + multiple: true, + accept: "image/*" + } + }; + let model = {}; + let input; + + before(() => { + createField({ schema, model }); + input = wrapper.find("input"); + schema.fieldOptions = { inputType: "file" }; + }); + + it("should contain an input text element", () => { + schema.fieldOptions.onChanged = sinon.spy(); + wrapper.setProps({ schema: { ...schema } }); + + input.trigger("change", { $event: "MyEvent" }); + + expect(schema.fieldOptions.onChanged.calledOnce).to.be.true; + }); + }); }); diff --git a/vue.config.js b/vue.config.js index 7bd722dd..febfbd83 100644 --- a/vue.config.js +++ b/vue.config.js @@ -47,6 +47,17 @@ module.exports = { } ]); config.plugin("lodash").use(LodashModuleReplacementPlugin); + } else if (process.env.NODE_ENV === "test") { + config.devtool("eval"); + config.module + .rule("istanbul") + .test(/\.(js|vue)$/) + .enforce("post") + .include.add(path.resolve(__dirname, "/src")) + .end() + .use("istanbul-instrumenter-loader") + .loader("istanbul-instrumenter-loader") + .options({ esModules: true }); } else { config.resolve.alias.set("vue-form-generator", path.resolve("src")); }