A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://rustwasm.github.io/docs/wasm-bindgen/wasm-bindgen-test/browsers.html below:

Testing in Headless Browsers - The `wasm-bindgen` Guide

  1. Introduction
  2. 1. Examples
    1. 1.1. Hello, World!
    2. 1.2. Using console.log
    3. 1.3. Small Wasm files
    4. 1.4. Without a Bundler
    5. 1.5. Synchronous Instantiation
    6. 1.6. Importing functions from JS
    7. 1.7. Working with char
    8. 1.8. js-sys: WebAssembly in WebAssembly
    9. 1.9. web-sys: DOM hello world
    10. 1.10. web-sys: Closures
    11. 1.11. web-sys: performance.now
    12. 1.12. web-sys: using fetch
    13. 1.13. web-sys: Weather report
    14. 1.14. web-sys: canvas hello world
    15. 1.15. web-sys: canvas Julia set
    16. 1.16. web-sys: WebAudio
    17. 1.17. web-sys: WebGL
    18. 1.18. web-sys: WebSockets
    19. 1.19. web-sys: WebRTC DataChannel
    20. 1.20. web-sys: requestAnimationFrame
    21. 1.21. web-sys: A Simple Paint Program
    22. 1.22. web-sys: Wasm in Web Worker
    23. 1.23. Parallel Raytracing
    24. 1.24. Wasm Audio Worklet
    25. 1.25. web-sys: A TODO MVC App
  3. 2. Reference
    1. 2.1. Deployment
    2. 2.2. JS snippets
    3. 2.3. Static JS Objects
    4. 2.4. Passing Rust Closures to JS
    5. 2.5. Receiving JS Closures in Rust
    6. 2.6. Promises and Futures
    7. 2.7. Iterating over JS Values
    8. 2.8. Arbitrary Data with Serde
    9. 2.9. Accessing Properties of Untyped JS Values
    10. 2.10. Working with Duck-Typed Interfaces
    11. 2.11. Command Line Interface
    12. 2.12. Optimizing for Size
    13. 2.13. Supported Rust Targets
    14. 2.14. Supported Browsers
    15. 2.15. Support for Weak References
    16. 2.16. Support for Reference Types
    17. 2.17. Supported Types
      1. 2.17.1. Imported JavaScript Types
      2. 2.17.2. Exported Rust Types
      3. 2.17.3. JsValue
      4. 2.17.4. Box<[T]> and Vec
      5. 2.17.5. *const T and *mut T
      6. 2.17.6. NonNull
      7. 2.17.7. Numbers
      8. 2.17.8. bool
      9. 2.17.9. char
      10. 2.17.10. str
      11. 2.17.11. String
      12. 2.17.12. Number Slices
      13. 2.17.13. Boxed Number Slices
      14. 2.17.14. Result<T, E>
    18. 2.18. #[wasm_bindgen] Attributes
      1. 2.18.1. On JavaScript Imports
        1. 2.18.1.1. catch
        2. 2.18.1.2. constructor
        3. 2.18.1.3. extends
        4. 2.18.1.4. getter and setter
        5. 2.18.1.5. final
        6. 2.18.1.6. indexing_getter, indexing_setter, and indexing_deleter
        7. 2.18.1.7. js_class = "Blah"
        8. 2.18.1.8. js_name
        9. 2.18.1.9. js_namespace
        10. 2.18.1.10. method
        11. 2.18.1.11. module = "blah"
        12. 2.18.1.12. raw_module = "blah"
        13. 2.18.1.13. no_deref
        14. 2.18.1.14. static_method_of = Blah
        15. 2.18.1.15. structural
        16. 2.18.1.16. typescript_type
        17. 2.18.1.17. variadic
        18. 2.18.1.18. vendor_prefix
      2. 2.18.2. On Rust Exports
        1. 2.18.2.1. constructor
        2. 2.18.2.2. js_name = Blah
        3. 2.18.2.3. js_class = Blah
        4. 2.18.2.4. readonly
        5. 2.18.2.5. skip
        6. 2.18.2.6. skip_jsdoc
        7. 2.18.2.7. start
        8. 2.18.2.8. main
        9. 2.18.2.9. typescript_custom_section
        10. 2.18.2.10. getter and setter
        11. 2.18.2.11. inspectable
        12. 2.18.2.12. skip_typescript
        13. 2.18.2.13. getter_with_clone
        14. 2.18.2.14. unchecked_return_type and unchecked_param_type
        15. 2.18.2.15. return_description and param_description
  4. 3. web-sys
    1. 3.1. Using web-sys
    2. 3.2. Cargo Features
    3. 3.3. Function Overloads
    4. 3.4. Type Translations
    5. 3.5. Inheritance
    6. 3.6. Unstable APIs
  5. 4. Testing with wasm-bindgen-test
    1. 4.1. Usage
    2. 4.2. Writing Asynchronous Tests
    3. 4.3. Testing in Headless Browsers
    4. 4.4. Continuous Integration
    5. 4.5. Coverage (Experimental)
  6. 5. Contributing to wasm-bindgen
    1. 5.1. Testing
    2. 5.2. Internal Design
      1. 5.2.1. JS Objects in Rust
      2. 5.2.2. Exporting a function to JS
      3. 5.2.3. Exporting a struct to JS
      4. 5.2.4. Importing a function from JS
      5. 5.2.5. Importing a class from JS
      6. 5.2.6. Rust Type conversions
      7. 5.2.7. Types in wasm-bindgen
    3. 5.3. js-sys
      1. 5.3.1. Testing
      2. 5.3.2. Adding More APIs
    4. 5.4. web-sys
      1. 5.4.1. Overview
      2. 5.4.2. Testing
      3. 5.4.3. Logging
      4. 5.4.4. Supporting More Web APIs
    5. 5.5. Publishing
    6. 5.6. Team
This documentation is no longer maintained at this domain, and is now maintained at wasm-bindgen.github.io instead. Testing in Headless Browsers Configure via Environment Variables

By default tests run on Node.js. To target browsers you can use the WASM_BINDGEN_USE_BROWSER environment variable:

WASM_BINDGEN_USE_BROWSER=1 cargo test --target wasm32-unknown-unknown

The following configurations are available:

Force Configuration

Tests can also be forced to run in a certain environment by using the wasm_bindgen_test_configure! macro:


# #![allow(unused_variables)]
#fn main() {
use wasm_bindgen_test::wasm_bindgen_test_configure;

// Run in a browser.
wasm_bindgen_test_configure!(run_in_browser);
// Or run in a dedicated worker.
wasm_bindgen_test_configure!(run_in_dedicated_worker);
// Or run in a shared worker.
wasm_bindgen_test_configure!(run_in_shared_worker);
// Or run in a service worker.
wasm_bindgen_test_configure!(run_in_service_worker);
// Or run in Node.js but as an ES module.
wasm_bindgen_test_configure!(run_in_node_experimental);
#}

Note that this will ignore any environment variable set.

Configuring Which Browser is Used

To control which browser is used for headless testing, use the appropriate flag with wasm-pack test:

If multiple browser flags are passed, the tests will be run under each browser.

Running the Tests in the Headless Browser

Once the tests are configured to run in a headless browser, just run wasm-pack test with the appropriate browser flags and --headless:

wasm-pack test --headless --chrome --firefox --safari
Configuring Headless Browser capabilities

Add the file webdriver.json to the root of your crate. Each browser has own section for capabilities. For example:

{
  "moz:firefoxOptions": {
    "prefs": {
      "media.navigator.streams.fake": true,
      "media.navigator.permission.disabled": true
    },
    "args": []
  },
  "goog:chromeOptions": {
    "args": [
      "--use-fake-device-for-media-stream",
      "--use-fake-ui-for-media-stream"
    ]
  }
}

Full list supported capabilities can be found:

Note that the headless argument is always enabled for both browsers.

Debugging Headless Browser Tests

Omitting the --headless flag will disable headless mode, and allow you to debug failing tests in your browser's devtools.

Appendix: Testing in headless browsers without wasm-pack

⚠️ The recommended way to use wasm-bindgen-test is with wasm-pack, since it will handle installing the test runner, installing a WebDriver client for your browser, and informing cargo how to use the custom test runner. However, you can also manage those tasks yourself, if you wish.

Configuring Which Browser is Used

If one of the following environment variables is set, then the corresponding WebDriver and browser will be used. If none of these environment variables are set, then the $PATH is searched for a suitable WebDriver implementation.

GECKODRIVER=path/to/geckodriver

Use Firefox for headless browser testing, and geckodriver as its WebDriver.

The firefox binary must be on your $PATH.

Get geckodriver here

CHROMEDRIVER=path/to/chromedriver

Use Chrome for headless browser testing, and chromedriver as its WebDriver.

The chrome binary must be on your $PATH.

Get chromedriver here

SAFARIDRIVER=path/to/safaridriver

Use Safari for headless browser testing, and safaridriver as its WebDriver.

This is installed by default on Mac OS. It should be able to find your Safari installation by default.

Running the Tests in the Remote Headless Browser

Tests can be run on a remote webdriver. To do this, the above environment variables must be set as URL to the remote webdriver. For example:

CHROMEDRIVER_REMOTE=http://remote.host/
Running the Tests in the Headless Browser

Once the tests are configured to run in a headless browser and the appropriate environment variables are set, executing the tests for headless browsers is the same as executing them for Node.js:

cargo test --target wasm32-unknown-unknown
Debugging Headless Browser Tests

Set the NO_HEADLESS=1 environment variable and the browser tests will not run headless. Instead, the tests will start a local server that you can visit in your Web browser of choices, and headless testing should not be used. You can then use your browser's devtools to debug.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4