Skip to content

Commit

Permalink
Add a test framework to test the JS part of the course (#2471)
Browse files Browse the repository at this point in the history
This is a first draft for a test framework for testing the JS part of
the book that is discussed in #2462

It is using [webdriverIO](https://webdriver.io/) and the webdriverIO
[Expect API](https://webdriver.io/docs/api/expect-webdriverio/) in
combination with [Mocha](https://mochajs.org/). WebdriverIO is taking
care of accessing the webpage with a real browser and can access the
state of the page so behavior can be asserted.

Currently only a small test for the speaker-notes implementation demos
the functionality.

The [Static Server
Service](https://webdriver.io/docs/static-server-service/) is used to
serve the book in a way that the test runner can access it.

A CI integration can look like https://webdriver.io/docs/githubactions/
and is implemented with a headless setup. In CI it uses the language
variable to set environment variable that configures where the built
book should be mounted from

---------

Co-authored-by: Martin Geisler <[email protected]>
  • Loading branch information
michael-kerscher and mgeisler authored Dec 4, 2024
1 parent d868584 commit 48b2b5c
Show file tree
Hide file tree
Showing 10 changed files with 7,206 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,19 @@ jobs:
MDBOOK_BOOK__LANGUAGE: ${{ matrix.language }}
run: mdbook test

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
- name: Install test framework
run: npm install
working-directory: ./tests
- name: Test Javascript
run: npm test
env:
TEST_BOOK_DIR: ../book/comprehensive-rust-${{ matrix.language }}/html
working-directory: ./tests

po-diff:
name: Translation diff
runs-on: ubuntu-latest
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ count.dat
# Nodejs Files (dprint)
node_modules/
package.json
!tests/package.json
pnpm-lock.yaml

# Crowdin Config (Contains API Keys)
Expand Down
20 changes: 20 additions & 0 deletions tests/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Testing Comprehensive Rust

The course material contains JS code that can break and needs to be checked for
functionality. Examples are `theme/speaker-notes.js` or `theme/book.js`.

Comprehensive Rust is using [webdriverIO](https://webdriver.io/) and the
[webdriverIO Expect API](https://webdriver.io/docs/api/expect-webdriverio/) in
combination with [Mocha] (https://mochajs.org/). WebdriverIO is taking care of
accessing the webpage with a real browser and can access the state of the page
so behavior can be asserted.

The [Static Server Service](https://webdriver.io/docs/static-server-service/) is
used mainly in the [CI](../github/workflows/build.yml) to serve the book on port
`localhost:8080` such that the test runner can access it. This mode is used when
`npm start` or `npm test` is executed.

For local testing and quick iterations it is possible to use `mdbook serve`
which creates a small HTTP server on port 3000 by default. There is a special
config that is invoked with `npm run test-mdbook` that uses
`http://localhost:3000`
Loading

0 comments on commit 48b2b5c

Please sign in to comment.