ืื ื ืืฉืชืืฉืื ืืคืืืคืืจืื ืืืืคื ืคืขืื ืืขืืืืชื ื soundQube ืืฉืืืจ ืขื ืืืืืช ืงืื ืืจืื ืืืืื. ืืขืช ืฉืืืื ืืื ืืืคืจืืืงืืื ืฉื ืืชืื ื VueJs+Typescript, ืืชืขืืจืจื ืืขืืืช. ืืื, ืื ื ืจืืฆื ืืกืคืจ ืืื ืืืชืจ ืคืืจืื ืืืฆื ืืฆืืื ื ืืคืชืืจ ืืืชื.
ืืืืืจ ืื ื ืืืจ, ืืคื ืฉืืชืืชื ืืืขืื, ืขื ืคืืืคืืจืืช SonarQube. ืงืฆืช ืชืืืืจืื - ืื ืื ืืืื, ืืื ืฉืฉืืืข ืขื ืื ืืคืขื ืืจืืฉืื ื:
soundQube (ืึฐืฉืึถืขึธืึทืจ ืกืึนื ึธืจ) ืืื ืคืืืคืืจืืช ืงืื ืคืชืื ืืืืืงื ืจืฆืืคื ืืืืืืืช ืืืืืช ืงืื.
ืชืืื ืื ืืชืื ืงืื ืืืืืื ืฉืืืืืช ืืคื ืืืืืื ืฉื ืชืงื ื ืืชืื ืืช MISRA C, MISRA C++, MITER/CWE ื-CERT Secure Coding Standards. ืืื ืืืื ืื ืืืืืช ืฉืืืืืช ืืจืฉืืืืช ืฉืืืืืช ืืชืื ืืช ืืืืืืืืช ืฉื OWASP 10 ื-CWE/SANS Top 25.
ืืืจืืช ืืขืืืื ืฉืืคืืืคืืจืื ืืฉืชืืฉืช ืืืืื ืืืื ืื ืฉืื ืื, SonarQube ืืฆืืฆืืช ืืช ืืชืืฆืืืช ืืืื ืืืืื ืื ืืื, ืฉืืืจืช ืืืกืืืจืื ืฉื ืจืืฆืืช ืืืื ืืืคืฉืจืช ืื ืืจืืืช ืืช ืืืืื ืืืืืืช ืฉื ืฉืื ืืืื ืืืืืืช ืืชืืื ื ืืืืื ืืคืืชืื.
ืคืจืืื ื ืืกืคืื ื ืืชื ืืืฆืื ื
ืืกืคืจ ืจื ืฉื ืฉืคืืช ืชืื ืืช ื ืชืืืืช. ืื ืืฉืคืื ืืคื ืืืืืข ืืืงืืฉืืจ ืืืขืื, ืืืืืจ ืืืืชืจ ื-25 ืฉืคืืช. ืืื ืืชืืื ืืฉืคื ืืกืืืืช, ืขืืื ืืืชืงืื ืืช ืืคืืืืื ืืืชืืื. ืืจืกืช ืืงืืืื ืืืืืช ืชืืกืฃ ืืขืืืื ืืืชื Javascript (ืืืื ืืืคืืกืื), ืืืจืืช ืฉืืืืืงื ืืืืจ ืืช ืืืืคื. ืึตืึธืืึนืจ Javascript ืชืฉืืืืช ืืคืืืืื SonarJS, ืขืืืจ Typescript SonarTS ืืืชืืื.
ืืืงืื ืืจืฉืื ืืฉืืฉ ืืฉืืืืช ืืืืข ืืืกืื sonarqube-scanner, ืืฉืจ, ืืืืฆืขืืช ืืืืืจืืช ื config-ืงืืืฅ, ืฉืืื ื ืชืื ืื ืืื ืืฉืจืช soundQube ืืืืืืฉ ืืืฆืืืจืืช ื ืืกืคืช.
ืขืืืจ Javascript ืืฉ
ืืื ืืคืจืืก ืืช ืืฉืจืช soundQube ืืืื ื ื ืฆื ืืืืงืจ-ืืืื ื.
sonar.yaml:
version: '1'
services:
simplesample-sonar:
image: sonarqube:lts
ports:
- 9001:9000
- 9092:9092
network_mode: bridge
ืึฐืึทืฉืึดืืง:
docker-compose -f sonar.yml up
ืืืืจ ืืื soundQube ืืืื ืืืื ื:
ืืื ืื ืขืืืื ืคืจืืืงืืื ืืื ืืืื. ืื ืื ื ื ืชืงื ืืช ืืืฆื ืืื. ืืงืืชื ืืช ืืคืจืืืงื ืืจืฉืื ืืืืืื VueJS+TS+Jest. ืืืื ื ืืืคืฃ ืืช ืื ืืืคื ืขืฆืื ื:
git clone https://github.com/vuejs/vue-test-utils-typescript-example.git
ืจืืฉืืช ืขืืื ื ืืืชืงืื ืืช ืืืงืื soundQube, ืฉื ืงืจื ืกืื ืจ-ืกืืจืงืขืืืจ Npm ืืฉ ืขืืืคื:
yarn add sonarqube-scanner
ืืืื ืืืกืฃ ืืช ืืคืงืืื ื ืกืงืจืืคืืื ืืขืืื ืขื ืื.
package.json:
{
โฆ
scripts: {
...
"sonar": "sonar-scanner"
...
},
โฆ
}
ืืืืจ ืืื, ืืื ืฉืืกืืจืง ืืขืืื, ืขืืื ืืืืืืจ ืืช ืืืืจืืช ืืคืจืืืงื ืืงืืืฅ ืืืืื. ืืืื ื ืชืืื ืขื ืืืกืืืืช.
sonar-project.properties:
sonar.host.url=http://localhost:9001
sonar.projectKey=test-project-vuejs-ts
sonar.projectName=Test Application (VueJS+TS)
sonar.sources=src
# sonar.tests=
sonar.test.inclusions=src/**/*tests*/**
sonar.sourceEncoding=UTF-8
- sonar.host.url - ืืชืืืช ืกืึนื ึธืจ'ื;
- sonar.projectKey - ืืืื ืคืจืืืงื ืืืืืื ืืฉืจืช ืกืึนื ึธืจ'ื;
- sonar.projectName โ ืฉืื, ื ืืชื ืืฉื ืืช ืืืชื ืืื ืขืช, ืืืืืื ืฉืืคืจืืืงื ืืืืื ืขื ืืื ืืคืชื ืคืจืืืงื;
- sonar.sources - ืชืืงืืื ืขื ืืงืืจืืช, ืืืจื ืืื ืื src, ืืื ืืืื ืืืืืช ืื ืืืจ. ืชืืงืืื ืื ืืืืืจืช ืืืืก ืืชืืงืืืช ืืฉืืจืฉ, ืฉืืื ืืชืืงืื ืฉืืื ื ืืืคืขื ืืกืืจืง;
- sonar.tests โ ืคืจืืืจ ืฉืืืื ืืืงืืื ืืคืจืืืจ ืืงืืื. ืืืื ืืชืืงืื ืฉืื ืืืืงืืืช ืืืืืงืืช. ืืคืจืืืงื ืื ืืื ืชืืงืื ืืื, ืืืืืืงื ืืืืงืืช ืืื ืืจืืื ืื ืืืง ืืชืืงืืื 'ืืืื', ืื ื ืชืขืื ืืื ื ืืขืช ืขืชื ืื ืฉืชืืฉ ืืคืจืืืจ ืืื;
- ืชืืืืืื.sonar.test - ื ืชืื ืืืืืงืืช ืืืืฆืขืืช ืืกืืื, ืขืฉืืืื ืืืืืช ืืกืคืจ ืืืื ืืื ืืืืคืจืืื ืืคืกืืงืื;
- sonar.sourceEncoding - ืงืืืื ืขืืืจ ืงืืฆื ืืงืืจ.
ืืงืจืืช ืืืฉืงื ืืจืืฉืื ื ืฉื ืืกืืจืง ืืื ืืืื, ืืืื ืืคืขืืื ืืขืืงืจืืช ืืงืืืืช: ืืคืขืืช ืื ืืข ืืืืืงื ืขืฆืื, ืืื ืฉืืืื ืืืคืืง ืืืืข ืขื ืืืืกืื, ืฉืื ืืฉืชืืฉ ืืกืืจืง ืืืืจ ืืื.
ืืื ืืื ืืขืฉืืช ืืืช, ืขืืื ืืืืืืจ ืืช ืื ืืข ืืืืืงื ืืื ืืืฆืืจ ืืืืข ืื. ืืคืจืืืงื ืื, ืื ืืข ืืืืืงื ืืื ืืฉ. ืืืืืืจืืช ืฉืื ื ืืฆืืืช ืืืืง ืืืชืืื ืฉื ืืงืืืฅ package.json.
ืืืื ื ืืกืืฃ ืืช ืืืืืจืืช ืืืื:
"collectCoverage": true,
"collectCoverageFrom": [
"src/**/*",
"!src/main.ts",
"!src/App.vue",
"!src/**/*.d.*",
"!src/**/*__tests__*"
],
ืืืืืจ, ืื ืื ื ืืืืืจืื ืืช ืืืื ืขืฆืื ืืฆืืจื ืืืฉืื ืืืืกืื ืืืช ืืืงืืจ (ืืฆื ืืจืืืื) ืฉืขื ืืกืืกื ืืืืฆืจ.
ืขืืฉืื ืืืื ื ืจืืฅ ืืช ืืืืืงื:
yarn test
ื ืจืื ืืช ืืืืจืื ืืืืื:
ืืกืืื ืืื ืฉืืื ืงืื ืืจืืื ืขืฆืื. ืืื ื ืชืงื ืืช ืื.
HelloWorld.vue:
...
methods: {
calc(n) {
return n + 1;
}
},
mounted() {
this.msg1 = this.msg + this.calc(1);
},
...
ืื ืืกืคืืง ืืื ืืืฉื ืืช ืืืืกืื.
ืืืืจ ืืคืขืื ืืืืฉ ืฉื ืืืืืงื, ื ืืืื ืืืช:
ืขื ืืืกื ืื ื ืืืืจืื ืืจืืืช ืืืืข ืขื ืืืืกืื, ืืชืืืืฆืจ ืชืืงืื ืืชืืงืืืช ืืคืจืืืงื ืืืกืื ืขื ืืืืข ืืืกืื ืืืื ืืคืืจืื ืืื ืืืจืกืื LCOV (ืชืืกืฃ LTP GCOV).
Gcov ืืื ืืื ืขืืจ ืืืืคืฅ ืืืืคื ืืืคืฉื ืืืืื ืช ืืืกืื ืงืื. Gcov ืืืืฆืจ ืืช ืืืกืคืจ ืืืืืืง ืฉื ืืืฆืืขืื ืขืืืจ ืื ืืฉืคื ืืชืืื ืืช ืืืืคืฉืจ ืื ืืืืกืืฃ ืืขืจืืช ืืงืื ืืืงืืจ. Gcov ืืืืข ืืฉืืจืืช ืกืื ืืจืื ืืืืง ืืืืืืช GCC.
Lcov - ืืืฉืง ืืจืคื ืขืืืจ gcov. ืืื ืืจืืื ืงืืฆื gcov ืืงืืืฆื ืืงืืจ ืืจืืืื ืืืืืฆืจ ืงืืืฆื ืฉื ืืคื HTML ืขื ืงืื ืืืืืข ืืืกืื. ืืคืื ื ืืฆืจืื ืื ืืื ืืืงื ืขื ืื ืืืื. Lcov ืชืืื ืืืืกืื ืฉื ืืืจืืืืช, ืคืื ืงืฆืืืช ืืขื ืคืื.
ืืืืจ ืืฉืืืช ืืืืืงืืช, ืืืืข ืืืืกืื ืืืฆื ื coverage/lcov.info.
ืื ืื ื ืฆืจืืืื ืืืืจ ืกืึนื ึธืจ'ืืืืคื ืื ื ืืืื ืืืฉืื ืืช ืื? ืืื, ืืืื ื ืืกืืฃ ืืช ืืฉืืจืืช ืืืืืช ืืงืืืฅ ืืชืฆืืจื ืฉืื. ืืื ืืฉ ื ืงืืื ืืืช: ืคืจืืืงืืื ืืืืืื ืืืืืช ืจื ืืฉืื ืืื, ืืืืืจ ืืชืืงืืื src ืืฉื ื ืงืืื ืืงืืจ ืืืกืคืจ ืฉืคืืช ืชืื ืืช ืืืฉืชืืืืืช ืืืืช ืื ืืืจืช, ืืืชืืืจื, ืืฉืืืืฉ ืืชืืกืฃ ืืกืืื ื ืงืืข ืขื ืคื ืืืจืืื ืฉืื. ืื ืืชื ืืืืกื ืืืืข ืืืกืื ืืืงืืืืช ืฉืื ืื ืขืืืจ ืฉืคืืช ืชืื ืืช ืฉืื ืืช, ืื ืฉืืื ืฉืคื ืืฉ ืกืขืืฃ ืืฉืื ืืืืืจื ืื. ืืคืจืืืงื ืฉืื ื ืืฉืชืืฉ ืืชื ืืชืืื, ืื ืื ืื ื ืฆืจืืืื ืกืขืืฃ ืืืืจืืช ืจืง ืืฉืืื ืื:
sonar-project.properties:
sonar.typescript.coveragePlugin=lcov
sonar.typescript.lcov.reportPaths=coverage/lcov.info
ืืื ืืืื ืืงืจืืช ืืืฉืงื ืืจืืฉืื ื ืฉื ืืกืืจืง. ืื ื ืจืืฆื ืืฆืืื ืฉืืคืจืืืงื ืืื ืกืึนื ึธืจ'e ื ืืฆืจ ืืืืคื ืืืืืืื ืืคืขื ืืจืืฉืื ื ืฉืืชื ืืคืขืื ืืช ืืกืืจืง ืขืืืจ ืคืจืืืงื ื ืชืื. ืืืื ืื ืืืืื ืืฆืืืจ ืืืืข ืขื ืื ืช ืืจืืืช ืืช ืืืื ืืืงื ืฉื ืฉืื ืืืื ืืคืจืืืจืื ืฉื ืืคืจืืืงื ืืืืจื ืืื.
ืื ืืืื ื ืฉืชืืฉ ืืคืงืืื ืฉื ืืฆืจื ืงืืื ืืื package.json:
yarn run sonar
ืืขืจื: ืืชื ืืืื ืื ืืืฉืชืืฉ ืืคืจืืืจ -X ืืจืืฉืื ืืคืืจื ืืืชืจ.
ืื ืืกืืจืง ืืืฉืง ืืคืขื ืืจืืฉืื ื, ืืงืืืฅ ืืืื ืืจื ืฉื ืืกืืจืง ืขืฆืื ืืืจืื ืชืืืื. ืืืืจ ืืื ืืื ืืชืืื ืืืชืืื ืืกืจืืง ืืช ืืฉืจืช ืกืึนื ึธืจ'a ืขืืืจ ืชืืกืคืื ืืืชืงื ืื, ืืืื ืืืฉื ืืช ืืฉืคื ืื ืชืืืช. ื ืืขื ืื ืื ืคืจืืืจืื ืฉืื ืื ืืืจืื ืืคืขืืืชื: ืคืจืืคืืื ืืืืืช, ืืืืื ืคืขืืืื, ืืืืจ ืืืืื, ืืืื ืฉืจืช.
ืืขืจื: ืื ื ืชืขืื ืขืืืื ืืคืืจืื ืืืกืืจืช ืืืืจ ืื, ืื ืชืืื ืชืืื ืืคื ืืช ืืืงืืจืืช ืจืฉืืืื.
ืืืืจ ืืื, ื ืืชืื ืืชืืงืืืช ืืชืืื src ืืืืื ืืช ืฉื ืงืืฆื ืืงืืจ ืขืืืจ ืื ืืฉืคื ืื ืชืืืช (ืื ืื ืฆืืื ืืืคืืจืฉ) ืขื ืืืกืคืชื ืืืื ืืงืก.
ืืืืฉื ืืืืขืื ื ืืชืืืื ืฉืื ืื ืืืจืื, ืฉืื ื ืชืืงื ืืื ืืืืืจ ืื (ืืืืืื, ืืืื ืจืืืื, ืืืืื ืฉืืคืื ืงืื ืืื').
ืืกืืฃ ืขืืืืช ืืกืืจืง, ืื ืืืืืข ืฉื ืืกืฃ ื ืืกืฃ, ืืืืืกื ืืืจืืืื ืื ืฉืื ืืฉืจืช.
ืืืจื ืื, ืื ืื ื ืืืจ ืืืืืื ืืจืืืช ืื ืงืจื ืืืืฉืง ืืืื ืืจื ื:
ืืคื ืฉืื ื ืืืืืื ืืจืืืช, ืืฉืื ืขืื, ืืืคืืื ืืจืื ืกืื ืฉื ืกืืงืืจ, ืืื ืื ืื ืชืืื ืืช ืฉืื ื ืืฉ-ืืืืืฉ ืชืืื ื.
ืืื ื ืืื ืืช ืื. ืืืื ื ืกืชืื ืขื ืืคืจืืืงื ืืืชืจ ืคืืจืื, ื ืืืฅ ืขื ืขืจื ืืืืกืื ื"ื ืื ืก" ืืืื ืงืืืฅ ืืคืืจื:
ืืื ืื ื ืจืืืื, ืื ืืกืฃ ืืชืืง ืืจืืฉื, ืื ืืืง HelloWorld.vue, ืืฉ ืื ืงืืืฅ main.ts, ืื ืฉืืงืืงื ืืช ืื ืชืืื ืช ืืกืืงืืจ. ืืื ืืื ืื ืฉืืืจืื ื ืืช ืื ืืืืฉืื ืืืืกืื. ืื, ืืื ื ืืื, ืืื ืื ืืื ืืจืื ืืฉ, ืืื ืืกืืจืง ืืื ืืงืก ืืืชื, ืื ืื ืืืืข ืืกืืคื ืฉื ืืืจ ืืืืฉืืืื ืฉืื.
ืืื ื ืชืงื ืืช ืื:
sonar-project.properties:
...
sonar.exclusions=src/main.ts
...
ืืจืฆืื ื ืืืืืืจ: ืื ืืกืฃ ืืชืืงืืืช ืืืฆืืื ืืช ืืคืจืืืจ ืื, ืืชืืืกืคืืช ืื ืื ืืชืืงืืืช ืืืคืืจืืืช ืืคืจืืืจ ืชืืืืืื.sonar.test.
ืืืืจ ืืคืขืืช ืืกืืจืง, ืื ื ืจืืืื ืืช ืืืืืข ืื ืืื:
ืืืื ื ืกืชืื ืขื ืื ืงืืื ืืืื - ืคืจืืคืืื ืืืืืช. ืืืืจืชื ืืืขืื ืขื ืชืืืื ืกืึนื ึธืจืืืื ืฉืคืืช ืื ืืื ืืช. ืื ืืืืืง ืื ืฉืื ืื ื ืจืืืื. ืืื ืื ืื ื ืืืืขืื ืฉืืคืจืืืงื ืฉืื ื ืืชืื TS, ืื ืืื ืืืืฅ ืืช ืืกืืจืง ืขื ืื ืืคืืืฆืืืช ืืืืืงืืช ืืืืชืจืืช. ื ืืืืจ ืืช ืืฉืคื ืื ืืชืื ืขื ืืื ืืืกืคืช ืคืจืืืจ ืืื ื ืืกืฃ ืืงืืืฅ ืืชืฆืืจื ืกืึนื ึธืจ'ื:
sonar-project.properties:
...
sonar.language=ts
...
ืืื ื ืจืืฅ ืฉืื ืืช ืืกืืจืง ืื ืจืื ืืช ืืชืืฆืื:
ืืืืกืื ื ืขืื ืืืืืืื.
ืื ื ืกืชืื ืืืืื ืืกืืจืง, ื ืืื ืืจืืืช ืืช ืืฉืืจื ืืืื:
ืืืืืจ, ืงืืฆื ืืคืจืืืงื ืฉืื ื ืคืฉืื ืื ื ืืกืคื ืืืื ืืงืก.
ืืืฆื ืืื ืืืืงืื: ื ืชืื ืจืฉืืืช VueJs ื ืืฆื ืืชืืกืฃ SonarJSืขื ืื ืืืจืื Javascript.
ืืื ืืชืืืื ืืื ืื ื ืืฆืืช ืืชืืกืฃ SonarTS ืขืืืจ TS, ืืืืื ื ืคืชื ืืจืืืก ืจืฉืื ืืืขืงื ืืืจ ืืืืื ืกืึนื ึธืจ'ื:
ืื ื ืืื ืชืฉืืืืช ืืืื ืื ืฆืืืื ืืืคืชืื SonarQube, ืืืืฉืจืืช ืขืืืื ืื.
ืืื ืืื ืขืื ืื ื, ืืชื ืืชื ืื. ืื, ืืื ื ื ืกื ืืช ืื ืงืฆืช "ืึทืจืึถื".
ืื ืืฉ ืชืืืื .vue-ืงืืฆืื ืกืึนื ึธืจ'ืืื, ืื ืืื ื ื ืกื ืืืืื ืื ืืืชืืืืก ืืืืื ืืื ืืชื ืืชืืื.
ืืืื ื ืืกืืฃ ืคืจืืืจ:
sonar-project.properties:
...
sonar.typescript.file.suffixes=.ts,.tsx,.vue
...
ืืืื ื ืคืขืื ืืช ืืกืืจืง:
ืืืจื, ืืื ืืืจ ืืงืืืืชื, ืืขื ืคืจืืคืื ืืื ืืืื ืขืืืจ ืืชื ืืชืืื. ืืืืืจ, ืืฆืืื ื ืืคืชืืจ ืืช ืืืขืื ืืชืืืื VueJs+TS ืขืืืจ soundQube.
ืืืื ื ื ืกื ืืืืช ืจืืืง ืืืชืจ ืืืฉืคืจ ืืขื ืืช ืืืืข ืืืืกืื.
ืื ืขืฉืื ื ืขื ืื:
- ื ืืกืฃ ืืคืจืืืงื ืกืึนื ึธืจ-ืกืึนืจึตืง;
- ืืืืื ืืฉ ืืืคืงืช ืืืืข ืืืกืื;
- ืืืืืจ ืกืึนื ึธืจ-ืกืึนืจึตืง;
- ืคืชืจ ืืช ืืขืืืช ืืชืืืื .vue-ืงืืฆืื + ืืชื ืืชืืื.
ืื ืืกืฃ ืืืืกืื ืืืืืงื, ืืฉื ื ืงืจืืืจืืื ืื ืฉืืืืฉืืื ื ืืกืคืื ืืืขื ืืื ืื ืืืืืืช ืืงืื, ืืืฉื ืฉืืคืื ืงืื ืืืกืคืจ ืืฉืืจืืช (ืืืขืืจืืืช ืืืืฉืื ืืงืืืื ืืงืฉืืจืื ืืืืจืืืืช ืืงืื) ืฉื ืืคืจืืืงื.
ืืืืฉืื ืื ืืืื ืฉื ืืชืืกืฃ ืืขืืืื ืขื TS (SonarTS) ืื ืืขืืื CPD (ืืืื ืืขืชืงื ืืืืง) ืืกืคืืจืช ืฉืืจืืช ืงืื .vue-ืงืืฆืื.
ืืื ืืืฆืืจ ืืฆื ืกืื ืชืื ืฉื ืฉืืคืื ืงืื, ืคืฉืื ืฉืืคื ืืช ืงืืืฅ ืืจืืื ืืฉื ืืืจ ืืื ืืืกืฃ ืืืชื ืืงืื main.ts ืคืื ืงืฆืืืช ืืื ืืฉืืคื ืืืชื ืืฉื ืืืจ. ืืื ืืืืืง ืฉืืคืื ืืื ื .vue, ื ื .ts -ืงืืฆืื.
main.ts:
...
function name(params:string): void {
console.log(params);
}
...
ืืื ืืขืฉืืช ืืืช, ืขืืื ืืืขืืจ ืืืืคื ืืื ื ืืช ืฉืืจืช ืืชืฆืืจื:
sonar-project.properties:
...
sonar.exclusions=src/main.ts
...
ืืืื ื ืคืขืื ืืืืฉ ืืช ืืกืืจืง ืืื ืขื ืืืืงื:
yarn test && yarn run sonar
ืืืืื ืฉืืกืืงืืจ ืฉืื ื ืืืคืื, ืืื ืขืืฉืื ืื ืื ืืขื ืืื ืืืชื ื.
ืืืื ืืื ืฉื ืฉืืคืื ืฉืืจืืช ืงืื, ื ืจืื:
ืืื ืืืืืง ื ืฉืชืืฉ ืืืืจ ืืืืฃ ืืืคืขืืช-ืชืืขืืช - jscpd:
npx jscpd src
ืขืืืจ ืฉืืจืืช ืงืื:
ืืืื ืื ืืืคืชืจ ืืืจืกืืืช ืชืืกืคืื ืขืชืืืืืช SonarJS(TS). ืื ื ืจืืฆื ืืฆืืื ืฉืื ืืชืืืืื ืืืืจืื ืืืื ืืช ืฉื ื ืืชืืกืคืื ืืืื ืืืื SonarJS, ืฉืืืขืชื ืืื ื ืืื.
ืขืืฉืื ืจืฆืืชื ืืฉืงืื ืืช ืืืคืฉืจืืช ืืฉืคืจ ืืช ืืืืข ืืืืกืื.
ืขื ืื ืื ื ืืืืืื ืืจืืืช ืืืกืื ืืืื ืืืืืืื ืขืืืจ ืืคืจืืืงื ืืืื, ืืืคืจื ืขืืืจ ืงืืฆืื. ืืื ืืคืฉืจ ืืืจืืื ืืช ืืืืืื ืืื ืขื ืืืืข ืขื ืืืืืช ืืืืื-ืืืืงืืช ืืคืจืืืงื, ืืื ืื ืืืงืฉืจ ืฉื ืงืืฆืื.
ืืฉ ืกืคืจืืื ืฉืืืืื ืืฉ-ืืืจ ืืช ืืืื ืืคืืจืื ืขืืืจ ืกืึนื ึธืจ'ื:
ื ืชืื ื ืืืืงื ืื ืจืืื -
ืืืื ื ืชืงืื ืืช ืืกืคืจืืื ืืื ืืคืจืืืงื ืฉืื ื:
yarn add jest-sonar-reporter
ืืืืกืืคื ืืืชื ืืชืฆืืจื ืืฉ:
package.json:
โฆ
"testResultsProcessor": "jest-sonar-reporter"
โฆ
ืขืืฉืื ืืืื ื ืจืืฅ ืืช ืืืืืงื:
yarn test
ืืืืจ ืืื ืืืืืฆืจ ืงืืืฅ ืืฉืืจืฉ ืืคืจืืืงื test-report.xml.
ืืืื ื ืฉืชืืฉ ืื ืืชืฆืืจื ืกืึนื ึธืจ'ื:
sonar-project.properties:
โฆ
sonar.testExecutionReportPaths=test-report.xml
โฆ
ืืืคืขื ืืืืฉ ืืช ืืกืืจืง:
yarn run sonar
ืืื ื ืจืื ืื ืืฉืชื ื ืืืืฉืง ืกืึนื ึธืจ'ื:
ืืฉืื ืืืจ ืื ืืฉืชื ื. ืืขืืืื ืืื ืฉืกืื ืืจ ืื ืืืฉืื ืืช ืืงืืฆืื ืืืชืืืจืื ืืื"ื Jest ืืงืืฆืื ืืืืื-ืืืืงืืช. ืขื ืื ืช ืืชืงื ืืฆื ืื, ืื ื ืืฉืชืืฉืื ืืคืจืืืจ ืืชืฆืืจื ืกืึนื ึธืจ sonar.tests, ืฉืื ื ืฆืืื ืืืคืืจืฉ ืืช ืืชืืงืืืช ืขื ืืืืงืืช (ืืฉ ืื ื ืจืง ืืืช ืืื ืชืืื):
sonar-project.properties:
โฆ
sonar.tests=src/components/__tests__
โฆ
ืืืื ื ืคืขืื ืืืืฉ ืืช ืืกืืจืง:
yarn run sonar
ืืื ื ืจืื ืื ืืฉืชื ื ืืืืฉืง:
ืขืืฉืื ืจืืื ื ืืช ืืืกืคืจ ืฉืื ื ืืืืื-ืืืืงืืช ืืืืืจ ืฉื ืืฉืื ืขื ืืื ืืืืฆื ืืคื ืื, ื ืืื ืืจืืืช ืืช ืืชืคืืืืช ืืืกืคืจ ืืื ืืื ืงืืฆื ืืคืจืืืงื:
ืืกืงื ื
ืื, ืืกืชืืื ื ืขื ืืื ืื ืืชืื ืจืฆืืฃ soundQube. ืฉืืืื ื ืื ืืืฆืืื ืคืจืืืงื ืฉื ืืชื ืื VueJs+TS. ืชืืงื ืืื ืืขืืืช ืชืืืืืช. ืืืืื ื ืืช ืชืืื ืืืืืข ืฉื ืืืืื ืืืกืื ืืืืืงื. ืืืืืจ ืื ืืืงื ื ืจืง ืืื ืืงืจืืืจืืื ื ืืืืืช ืืงืื (ืืืื ืืื ืืืจืืืืื ืฉืืื), ืืื soundQube ืชืืื ืืงืจืืืจืืื ื ืืืืืช ืืืจืื, ืืืื ืืืืงืืช ืืืืืืช. ืืื ืื ืื ืืชืืื ืืช ืืืื ืืืื ืืช ืืืืืื ื ืงืืืื-ืืจืกืืืช. ืืืช ืืชืืื ืืช ืืืขื ืืื ืืช ืืืฉืืืืฉืืืช ืืื ืืื ืืืจืฆืื soundQube ืขื ืืขืจืืืช ืฉืื ืืช ืื ืืืื ืืืืจ ืงืื, ืืืื GitLab ื-BitBucket. ืืื ืืข ืืืืื ืืงืฉืช ืืฉืืื (ืืืืื).'ื ืืกื ืืฃ ืืจืืฉื ืฉื ืืืืืจ ืืืฉืจ ืืืืกืื ืืจื. ืืื ืื ืกืืคืืจ ืืืืืจ ืืืจ ืืืืจื.
ื .ื.: ืื ืืืชืืืจ ืืืืืจ ืืฆืืจื ืฉื ืงืื ืืืื ื
ืจืง ืืฉืชืืฉืื ืจืฉืืืื ืืืืืื ืืืฉืชืชืฃ ืืกืงืจ.
ืืื ืืชื ืืฉืชืืฉ ืืคืืืคืืจืืช SonarQube:
-
26,3%ืื5
-
15,8%ืืกืคืจ 3
-
15,8%ืฉืืขืชื ืขื ืืคืืืคืืจืื ืืื ืืื ื ืจืืฆื ืืืฉืชืืฉ ื3
-
10,5%ืฉืืขืชื ืขื ืืคืืืคืืจืื ืืื ืืื ื ืื ืจืืฆื ืืืฉืชืืฉ ื2
-
0,0%ืื ื ืืฉืชืืฉ ืืคืืืคืืจืื ืืืจืช0
-
31,6%ืคืขื ืจืืฉืื ื ืฉืฉืืขืชื ืขืืื6
19 ืืฉืชืืฉืื ืืฆืืืขื. 3 ืืฉืชืืฉืื ื ืื ืขื.
ืืงืืจ: www.habr.com