diff --git a/web/.eslintrc.js b/web/.eslintrc.js index 8bb6fea80..d0ed66328 100644 --- a/web/.eslintrc.js +++ b/web/.eslintrc.js @@ -1,12 +1,16 @@ module.exports = { root: true, + env: { node: true, }, + extends: ['plugin:vue/recommended', 'eslint:recommended', 'prettier'], + parserOptions: { parser: '@babel/eslint-parser', }, + rules: { 'no-unused-vars': 'off', 'no-undef': 'off', @@ -22,4 +26,16 @@ module.exports = { 'vue/no-template-shadow': 'off', 'vue/component-definition-name-casing': 'off', }, + + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] }; diff --git a/web/.gitignore b/web/.gitignore index a0dddc6fb..ef5750fa5 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -1,6 +1,8 @@ .DS_Store node_modules /dist +coverage +cypress # local env files .env.local diff --git a/web/cypress.config.js b/web/cypress.config.js new file mode 100644 index 000000000..bb002f166 --- /dev/null +++ b/web/cypress.config.js @@ -0,0 +1,11 @@ +const { defineConfig } = require('cypress'); + +module.exports = defineConfig({ + e2e: { + setupNodeEvents(on, config) { + // implement node event listeners here + }, + baseUrl: 'http://localhost:8080', + specPattern: 'tests/e2e/**/**/*.cy.{js,jsx,ts,tsx}', + }, +}); diff --git a/web/jest.config.js b/web/jest.config.js new file mode 100644 index 000000000..67fb08f97 --- /dev/null +++ b/web/jest.config.js @@ -0,0 +1,6 @@ +module.exports = { + preset: '@vue/cli-plugin-unit-jest', + collectCoverage: true, + collectCoverageFrom: ['/src/**/*.vue'], + transformIgnorePatterns: ['!node_modules/'], +}; diff --git a/web/package.json b/web/package.json index e024a5869..8d48d2a1f 100644 --- a/web/package.json +++ b/web/package.json @@ -5,6 +5,8 @@ "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", + "test:unit": "vue-cli-service test:unit", + "test:e2e": "vue-cli-service test:e2e --mode e2e", "lint": "vue-cli-service lint" }, "dependencies": { @@ -54,16 +56,23 @@ "devDependencies": { "@babel/eslint-parser": "^7.19.1", "@vue/cli-plugin-babel": "~5.0.8", + "@vue/cli-plugin-e2e-cypress": "^5.0.8", "@vue/cli-plugin-eslint": "~5.0.8", "@vue/cli-plugin-router": "~5.0.8", + "@vue/cli-plugin-unit-jest": "^5.0.8", "@vue/cli-plugin-vuex": "~5.0.8", "@vue/cli-service": "~5.0.8", "@vue/eslint-config-prettier": "^7.0.0", + "@vue/test-utils": "^1.3.3", + "@vue/vue2-jest": "^27.0.0", + "babel-jest": "^27.0.6", "babel-loader": "^9.1.0", + "cypress": "^12.3.0", "eslint": "^7.32.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-vue": "^9.7.0", "husky": "^8.0.1", + "jest": "^27.0.5", "lint-staged": "^13.0.3", "prettier": "^2.7.1", "raw-loader": "^4.0.2", @@ -72,11 +81,10 @@ "vue-template-compiler": "^2.6.11", "webpack-chain": "^6.5.1" }, - "resolutions": { - "error-stack-parser": "2.1.4", - "@pixi/graphics-smooth": "0.0.30", - "pixi.js": "7.0.3" - }, + "browserslist": [ + "> 1%", + "last 2 versions" + ], "husky": { "hooks": { "pre-commit": "lint-staged" @@ -85,8 +93,9 @@ "lint-staged": { "**/*.{vue,js,jsx,ts,tsx}": "npm run prettier:write" }, - "browserslist": [ - "> 1%", - "last 2 versions" - ] + "resolutions": { + "error-stack-parser": "2.1.4", + "@pixi/graphics-smooth": "0.0.30", + "pixi.js": "7.0.3" + } } diff --git a/web/src/App.vue b/web/src/App.vue index cd9a80c1d..9caeeaf4d 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -6,6 +6,7 @@