cypress: add initial code coverage support.

It's not optimal now, beacuse it changes source files.

Change-Id: I01cfb0be37eb0ef21dd1d606d9260b455a1cd585
Reviewed-on: https://gerrit.libreoffice.org/c/online/+/97036
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice@gmail.com>
Tested-by: Jenkins
Reviewed-by: Tamás Zolnai <tamas.zolnai@collabora.com>
private/tml/ios-gen2
Tamás Zolnai 2020-06-24 12:50:29 +02:00
parent 5e4f9b4554
commit 9ac9bc8be4
4 changed files with 50 additions and 3 deletions

View File

@ -3,3 +3,5 @@ cypress
package-lock.json
workdir
support/commands.js
coverage
.nyc_output

View File

@ -12,7 +12,8 @@ NPM_INSTALLED = $(abs_builddir)/workdir/npm_installed
PID_FILE=$(abs_builddir)/workdir/loolwsd.pid
ERROR_LOG=$(abs_builddir)/workdir/error.log
SUPPORT_FILE = $(if $(findstring $(abs_srcdir),$(abs_builddir)),support/index.js,$(abs_srcdir)/support/index.js)
SUPPORT_FILE_ABS = $(abs_srcdir)/support/index.js
SUPPORT_FILE = $(if $(findstring $(abs_srcdir),$(abs_builddir)),support/index.js,$(SUPPORT_FILE_ABS))
DESKTOP_USER_AGENT = "cypress"
DESKTOP_TEST_FOLDER = $(abs_srcdir)/integration_tests/desktop
@ -35,6 +36,8 @@ export DISPLAY=$(if $(HEADLESS_BUILD),:$(DISPLAY_NUMBER),$(shell echo $$DISPLAY)
CORE_VERSION := $(shell "@LO_PATH@"/program/soffice.bin --version 2> /dev/null)
COMMA :=,
if ENABLE_DEBUG
FILTER_DEBUG=cypress:electron,cypress:launcher
export DEBUG=$(if $(ENABLE_LOGGING),$(FILTER_DEBUG),)
@ -122,6 +125,24 @@ run-mobile: @JAILS_PATH@ $(NODE_BINS)
|| true
@$(KILL_COMMAND) || true
run-cov: @JAILS_PATH@ $(NODE_BINS)
@echo
@echo "Setup coverage tools..."
@echo
rm -rf .nyc_output
rm -rf coverage
npm install @cypress/code-coverage --no-save
@echo "import '@cypress/code-coverage/support';" >> $(SUPPORT_FILE_ABS)
@echo "" >> $(SUPPORT_FILE_ABS)
cd .. && npx nyc instrument --compact=false loleaflet/dist/src --in-place && cd cypress_test
@echo
@echo "Run all tests..."
@echo
$(call start_loolwsd)
$(call run_desktop_tests,,COVERAGE_RUN="1")
$(call run_mobile_tests,,COVERAGE_RUN="1")
@$(KILL_COMMAND) || true
define run_JS_error_check
@echo "Checking for JS errors in test code..."
@echo
@ -186,7 +207,7 @@ define run_desktop_tests
$(CYPRESS_BINARY) run \
--browser $(CHROME) \
--headless \
$(DESKTOP_CONFIG) \
$(DESKTOP_CONFIG)$(if $(2),$(COMMA)$(2),) \
$(if $(1), --spec=$(abs_dir)/integration_tests/desktop/$(1)) \
$(if $(PARALLEL_BUILD),,|| ($(KILL_COMMAND) && false)))
$(if $(PARALLEL_BUILD),\
@ -203,7 +224,7 @@ define run_mobile_tests
$(CYPRESS_BINARY) run \
--browser $(CHROME) \
--headless \
$(MOBILE_CONFIG) \
$(MOBILE_CONFIG)$(if $(2),$(COMMA)$(2),) \
$(if $(1), --spec=$(abs_dir)/integration_tests/mobile/$(1)) \
$(if $(PARALLEL_BUILD),,|| ($(KILL_COMMAND) && false)))
$(if $(PARALLEL_BUILD),\
@ -263,4 +284,6 @@ clean-local:
rm -rf workdir
rm -rf cypress
rm -rf package-lock.json
rm -rf .nyc_output
rm -rf coverage
endif

View File

@ -128,3 +128,23 @@ is different from the source directory. So to avoid this
issue with the supportFile, you should build in the source
directory or you should avoid symlinks in the path of the
build directory.
Code coverage
------------
We use nyc to instrument the code and then cypress code coverage
plugin is used to generate coverage numbers. This workflow
is called by the following command:
make run-cov
The output is put under cypress_test/covarage folder.
Open the cypress_test/covarage/lcov-report/index.html
file to get the summary report.
The make command above touches the source files under
loleaflet/dist/src folder, so after testing the coverage
doing a clean build is a good idea (e.g. make clean).
See also this link:
https://docs.cypress.io/guides/tooling/code-coverage.html

View File

@ -6,6 +6,8 @@ var blacklists = require('./blacklists');
var selectTests = require('cypress-select-tests');
function plugin(on, config) {
if (config.env.COVERAGE_RUN)
require('@cypress/code-coverage/task')(on, config);
on('task', {
copyFile: tasks.copyFile,
failed: require('cypress-failed-log/src/failed')()