0
0
Fork 0
mirror of https://codeberg.org/forgejo/docs.git synced 2024-11-26 18:29:35 -05:00
forgejo-docs/docs/developer/testing.md

121 lines
3.9 KiB
Markdown

---
title: 'Testing'
license: 'CC-BY-SA-4.0'
---
A [reasonable effort should be made to test changes](https://codeberg.org/forgejo/governance/src/branch/main/PullRequestsAgreement.md)
proposed to Forgejo.
## Running the tests from sources
To run automated frontend and backend tests:
```bash
make test
```
## Frontend tests
The [e2e](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/tests/e2e/README.md) frontend tests are run with:
```sh
make 'test-e2e-sqlite'
# or, for individual tests
make 'test-e2e-sqlite#example.test'
```
They are based on [playwright](https://playwright.dev/) and will:
- Launch a Forgejo instance
- Populate it with data found in the `models/fixtures` directory
- Launch a browser (e.g. Firefox)
- Run JavaScript tests (e.g. tests/e2e/example.test.e2e.js)
> **NOTE:** make sure to [use a version of Node >= 20.11.1](https://github.com/microsoft/playwright/issues/29253)
### With VSCodium or VSCode
To debug a test, you can use "Playwright Test" for
[VScodium](https://open-vsx.org/extension/ms-playwright/playwright)
or [VSCode](https://marketplace.visualstudio.com/items?itemName=ms-playwright.playwright).
Before doing that you will need to manually start a Forgejo instance and populate it
with data from `models/fixtures` by running:
```sh
make TAGS='sqlite sqlite_unlock_notify' 'test-e2e-debugserver'
```
### CLI
Tests can also be individually run on an existing server as follows:
```sh
GITEA_URL=http://0.0.0.0:3000 npx playwright test tests/e2e/release.test.e2e.js
```
In this case the Forgejo instance must be manually prepared with a minimal
subset of the data found in the `models/fixtures` directory.
## Interactive testing
To run and continuously rebuild when the source files change:
```bash
TAGS='sqlite sqlite_unlock_notify' make watch
```
> **NOTE:** do not set the `bindata` tag such as in `TAGS="bindata" make watch` or the browser may fail to load pages with an error like `Failed to load asset`
## Manual run of the binary
After following the [steps to compile from source](../from-source/), a `forgejo` binary will be available
in the working directory.
It can be tested from this directory or moved to a directory with test data. When Forgejo is
launched manually from command line, it can be killed by pressing `Ctrl + C`.
```bash
./forgejo web
```
## Automated tests
### In the Forgejo repository
When a [pull request](https://codeberg.org/forgejo/forgejo/pulls) is opened,
it will run workflows found in the [.forgejo/workflows](https://codeberg.org/forgejo/forgejo/src/branch/forgejo/.forgejo/workflows)
directory.
### In the end-to-end repository
Some tests are best served by running Forgejo from a compiled binary,
for instance to verify the result of a workflow run by the [Forgejo runner](https://code.forgejo.org/forgejo/runner). They can be
run by adding the `run-end-to-end-test` label to the pull request. It will:
- compile a binary from the pull request
- open a pull request against the [end-to-end](https://code.forgejo.org/forgejo/end-to-end) repository
- use the compiled binary to run the tests
- report back failure or success
### Debugging locally
A workflow can be run locally by [installing the Forgejo runner](../../admin/actions/#installation) and using the command line:
```sh
forgejo-runner exec --workflows .forgejo/workflows/testing.yml
```
## Manual testing
When the change to be tested lacks the proper framework, the manual
test procedure must be documented and referenced in the
[manual testing repository](https://codeberg.org/forgejo/forgejo-manual-testing).
The tests it contains should be run on a regular basis to verify they keep working.
Changes that are associated with a manual test procedure should be
labeled ["manual test"](https://codeberg.org/forgejo/forgejo/pulls?labels=181437).
## No test
When a change is not tested, it should be labeled
["untested"](https://codeberg.org/forgejo/forgejo/pulls?labels=167348). The
rationale for the absence of test should be explained.