Angular Auto Testing without the actual browser window
here is an article for whole Web testing concept and example, included Integration tests,Regression tests, Performance tests,Load tests, End-to-End (e2e) tests,UAT (user acceptance tests), Smoke Tests.
https://medium.com/bb-tutorials-and-thoughts/how-to-run-angular-e2e-tests-in-docker-f021c23c78f
Option #1: Run Headless Chrome
Since Chrome 59, it is possible to run it without the actual browser window. That feature is called Headless Chrome.
- install chrome Headless. https://tecadmin.net/setup-selenium-chromedriver-on-ubuntu/
#Prerequisites
sudo apt-get update
sudo apt-get install -y unzip xvfb libxi6 libgconf-2-4
sudo apt-get install default-jdk
#Install Google Chrome
sudo curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
sudo echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list
sudo apt-get -y update
sudo apt-get -y install google-chrome-stable
#Install ChromeDriver
wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/bin/chromedriver
sudo chown root:root /usr/bin/chromedriver
sudo chmod +x /usr/bin/chromedriver
#if you want to run Remote Selenium WebDrivers
wget https://selenium-release.storage.googleapis.com/3.13/selenium-server-standalone-3.13.0.jar
wget http://www.java2s.com/Code/JarDownload/testng/testng-6.8.7.jar.zip
unzip testng-6.8.7.jar.zip
#Run Chrome via Selenium Server
xvfb-run java -Dwebdriver.chrome.driver=/usr/bin/chromedriver -jar selenium-server-standalone.jar
# or Start Headless ChromeDriver
chromedriver --url-base=/wd/hub
Note: we use Karma to do the unit testing, so we should be install the dependency package in package.json [npm install xxx --save-dev]. as default angular project will included these packages.
- Unit Test
coverageReporter: {
type: 'lcov',
dir: 'reports',
subdir : 'coverage',
includeAllSources: true
},
reporters: ['progress', 'coverage'],
browsers:['Chrome', 'HeadlessChrome'],
customLaunchers:{
HeadlessChrome:{
base:"ChromeHeadless",
flags:[
"--no-sandbox",
// required to run without privileges in Docker
"--disable-web-security",
"--disable-gpu",
"--remote-debugging-port=9222"
]
}
},
singleRun: true
Run UT: ng test --watch=false --browsers=HeadlessChrome -code-coverage
- –watch=false
Specifies that we only want the tests to run once and then exit instead of watching for changes. - –browsers=HeadlessChrome
Specifies that we want to use Headless Chrome as the browser for the tests.
- E2E Tests modify protractor.conf.js
capabilities: {
chromeOptions: {
args:[
'--headless',
'--disable-gpu',
'--window-size=800x600',
'--disable-dev-shm-usage',
'--no-sandbox'
]
},
'browserName': 'ChromeHeadless'
},
Run UT: ng e2e
another way tests run without an actual browser window
Run PhantomJS :
https://blog.angulartraining.com/how-to-running-angular-tests-on-continuous-integration-servers-ad492219c08c
How to write Testing
https://blog.logrocket.com/angular-unit-testing/
https://dev.to/mustapha/angular-unit-testing-101-with-examples-6mc
Do SonarQube Scan:
sonar-scanner -D sonar.host.url=[Sonarqube Host url] -D sonar.projectKey=[ProjectKey] -D sonar.login=[loginToken] -D sonar.language=js -D sonar.sourceEncoding=UTF-8 -D sonar.sources=[project src path] -D sonar.projectVersion=[project version] -D sonar.typescript.lcov.reportPaths=coverage/lcov.info -D sonar.test.inclusions=/*.spec.ts,/test.ts -D sonar.coverage.exclusions=**/.js,src/main.ts,src/polyfills.ts,src/typings.d.ts,/environment.ts,/module.ts -D sonar.exclusions=/node_modules/,src/libs/*
some reference links:
https://angular.io/guide/testing
https://medium.com/@learning.bikash/angular-code-coverage-with-sonarqube-d2283442080b
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/