diff --git a/ProcessLib/GroundwaterFlow/CMakeLists.txt b/ProcessLib/GroundwaterFlow/CMakeLists.txt
index fb16a642ffdd757c0d6dcb38b1015be6b1160047..70d2e9f41e1aaa8a1be4933f5cc3371f04124060 100644
--- a/ProcessLib/GroundwaterFlow/CMakeLists.txt
+++ b/ProcessLib/GroundwaterFlow/CMakeLists.txt
@@ -34,6 +34,8 @@ foreach(mesh_size 1e0 1e1 1e2 1e3)
         ABSTOL 1e-1 RELTOL 1e-1
         DIFF_DATA
         cube_1x1x1_hex_${mesh_size}.vtu cube_${mesh_size}_neumann_pcs_0_ts_1_t_1.000000.vtu D1_left_front_N1_right pressure
+        VIS
+        cube_${mesh_size}_neumann_pcs_0_ts_1_t_1.000000.vtu
     )
 endforeach()
 
@@ -558,5 +560,3 @@ foreach(mesh_size 1e1)
         line_1_line_${mesh_size}.vtu line_${mesh_size}_neumann_pcs_0_ts_1_t_1_000000_0.vtu D1_left_N1_right pressure
     )
 endforeach()
-
-
diff --git a/scripts/cmake/Find.cmake b/scripts/cmake/Find.cmake
index ed14e951f76ab6dc3cf6f8babfc6536d932f87df..16901c5703642b72a3e0e4e06908dbb30f73ca92 100644
--- a/scripts/cmake/Find.cmake
+++ b/scripts/cmake/Find.cmake
@@ -64,6 +64,8 @@ if(CCACHE_FOUND)
     endif()
 endif(CCACHE_FOUND)
 
+find_program(VTKJS_CONVERTER vtkDataConverter)
+
 ######################
 ### Find libraries ###
 ######################
diff --git a/scripts/cmake/test/AddTest.cmake b/scripts/cmake/test/AddTest.cmake
index 733de255e4734ef975f40c60bb2ed870a9561b84..5a1c83c2330d5a277c03ef8fbd73dbf6df003751 100644
--- a/scripts/cmake/test/AddTest.cmake
+++ b/scripts/cmake/test/AddTest.cmake
@@ -15,6 +15,7 @@
 #   REQUIREMENTS # optional simple boolean expression which has to be true to
 #                  enable the test, e.g.
 #                  OGS_USE_PETSC AND (OGS_USE_EIGEN OR OGS_USE_LIS)
+#   VIS <vtu output file(s)> # optional for documentation
 # )
 #
 # Conditional arguments:
@@ -36,7 +37,7 @@ function (AddTest)
     # parse arguments
     set(options NONE)
     set(oneValueArgs EXECUTABLE PATH NAME WRAPPER TESTER ABSTOL RELTOL)
-    set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS)
+    set(multiValueArgs EXECUTABLE_ARGS DATA DIFF_DATA WRAPPER_ARGS REQUIREMENTS VIS)
     cmake_parse_arguments(AddTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
 
 
@@ -214,6 +215,9 @@ function (AddTest)
         COMMAND ${CMAKE_COMMAND}
         -Dcase_path=${AddTest_SOURCE_PATH}
         -DTESTER_COMMAND=${TESTER_COMMAND}
+        -DVTKJS_CONVERTER=${VTKJS_CONVERTER}
+        -DBINARY_PATH=${AddTest_BINARY_PATH}
+        "-DVIS_FILES=${AddTest_VIS}"
         -P ${PROJECT_SOURCE_DIR}/scripts/cmake/test/AddTestTester.cmake
     )
     set_tests_properties(${TESTER_NAME} PROPERTIES DEPENDS ${TEST_NAME})
diff --git a/scripts/cmake/test/AddTestTester.cmake b/scripts/cmake/test/AddTestTester.cmake
index 806bf527f8bc6cef99b458a6bf0ed0e3a1f6ceaa..6fdd3472fec13e2cac094eb1f92c76541f0edc04 100644
--- a/scripts/cmake/test/AddTestTester.cmake
+++ b/scripts/cmake/test/AddTestTester.cmake
@@ -17,3 +17,10 @@ endif()
 if(NOT EXIT_CODE STREQUAL "0")
     message(FATAL_ERROR "Error exit code: ${EXIT_CODE}")
 endif()
+
+# Run vtk.js converter
+foreach(FILE ${VIS_FILES})
+    execute_process(
+        COMMAND ${VTKJS_CONVERTER} -e -i ${BINARY_PATH}/${FILE} -o ${BINARY_PATH}/vtk-js
+    )
+endforeach()