# Dash3D Integration Testing (beta) Because Dash3d is still in experimental stage, we opt for only high-level integration testing at this point. ## Dependencies To run tests, install [node js](https://nodejs.org/): ``` conda install -c conda-forge nodejs ``` Make sure to install system dependencies required by [Cypress](https://docs.cypress.io/guides/getting-started/installing-cypress.html#System-requirements). Most front end dependencies are managed by [npm](https://www.npmjs.com/), automatically installed with node. To install front end dependencies, run the following from the **root of kaolin**: ``` npm install ``` ## How to run all tests All integration tests are wrapped in python. To run all tests from the root of kaolin: ``` pytest --capture=tee-sys tests/integration/experimental/dash3d/ ``` ## Under the Hood Currently, the only javascript tests are integration, and we call the javascript test from a python test file. In the future, this may change. #### Mocha Tests Javascript tests that can run *outside of the browser* are implemented using [Mocha](https://mochajs.org/). Note that currently, **all js tests are called from python**. To run Mocha tests manually, run: ``` npx mocha "./tests/integration/experimental/dash3d/*.js" ``` *Note:* his will fail, because it expects data generated by python wrapper tests. Failing mocha tests can be debugged in Chrome by running: ``` ./node_modules/mocha/bin/mocha --inspect --inspect-brk path/to/test.js ``` Then, in Chrome navigate to [chrome://inspect/](chrome://inspect/) and click "Open dedicated DevTools for Node". You may need to manually add the test and `static` sibdirectories under sources. #### Cypress Tests End-to-end tests that *require a browser* are implemented using [Cypress](https://www.cypress.io/). Note that currently, **all cypress tests are called from python**, but the tests themselves are written in javascript and located in `tests/integration/experimental/dash3d/cypress/integration/`. It is essential to be able to run them manually for debugging. First run a python test that spins up a dash3d instance in the background (note that multiple invokations of this may require you to set `--skip_start_dash3d` at the end of the command in case dash3d is already running): ``` python -m tests.integration.experimental.dash3d.run_e2e_test ``` This test also runs cypress tests, but in case they fail it's useful to invoke cypress manually. To open cypress UI: ``` npx cypress open --config-file tests/integration/experimental/dash3d/cypress.json ``` Alternatively, run cypress tests automatically (this is called from `run_e2e_test`): ``` npx cypress run --config-file tests/integration/experimental/dash3d/cypress.json ``` #### Debugging Cypress Tests Cypress writes a lot of diagnostic information during testing. Opening debug console in the browser during test execution is helpful. Also, check out the following directories: * screenshots: `tests/integration/experimental/dash3d/cypress/screenshots/` * videos: `tests/integration/experimental/dash3d/cypress/videos/` * renderings from tests: `tests/integration/experimental/dash3d/cypress/test_output/` Most of the tests perform visual regression to ensure that the right geometry is passed from the server to the client. As a consequence, changes to rendering properties will break the test and require change to golden files. The `test_output` directory will contain the updated golden files.