在無頭瀏覽器中進行測試

透過環境變數配置

預設情況下,測試會在 Node.js 上執行。若要以瀏覽器為目標,您可以使用 WASM_BINDGEN_USE_BROWSER 環境變數

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

以下組態可用

  • WASM_BINDGEN_USE_DEDICATED_WORKER:適用於專用 Worker
  • WASM_BINDGEN_USE_SHARED_WORKER:適用於共享 Worker
  • WASM_BINDGEN_USE_SERVICE_WORKER:適用於服務 Worker
  • WASM_BINDGEN_USE_DENO:適用於 Deno
  • WASM_BINDGEN_USE_NODE_EXPERIMENTAL:適用於 Node.js 但作為 ES 模組

強制組態

也可以使用 wasm_bindgen_test_configure! 巨集強制測試在特定環境中執行


# #![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);
#}

請注意,這將忽略任何設定的環境變數。

組態使用哪個瀏覽器

若要控制無頭測試使用哪個瀏覽器,請在 wasm-pack test 中使用適當的標誌

  • wasm-pack test --chrome — 在 Chrome 中執行測試。您的機器必須安裝 Chrome。

  • wasm-pack test --firefox — 在 Firefox 中執行測試。您的機器必須安裝 Firefox。

  • wasm-pack test --safari — 在 Safari 中執行測試。您的機器必須安裝 Safari。

如果傳遞多個瀏覽器標誌,則測試將在每個瀏覽器下執行。

在無頭瀏覽器中執行測試

一旦組態為在無頭瀏覽器中執行測試,只需使用適當的瀏覽器標誌和 --headless 執行 wasm-pack test

wasm-pack test --headless --chrome --firefox --safari

組態無頭瀏覽器功能

將檔案 webdriver.json 新增到您的 crate 的根目錄。每個瀏覽器都有自己的功能區段。例如

{
  "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"
    ]
  }
}

可以在這裡找到支援的完整功能清單

請注意,headless 引數始終對兩個瀏覽器都啟用。

除錯無頭瀏覽器測試

省略 --headless 標誌將會停用無頭模式,並讓您在瀏覽器的開發人員工具中除錯失敗的測試。


附錄:在沒有 wasm-pack 的情況下在無頭瀏覽器中進行測試

⚠️ 建議使用 wasm-pack 來使用 wasm-bindgen-test,因為它將處理安裝測試執行器、安裝瀏覽器的 WebDriver 用戶端,以及通知 cargo 如何使用自訂的測試執行器。 但是,如果您願意,也可以自行管理這些任務。

組態使用哪個瀏覽器

如果設定了以下其中一個環境變數,則將使用對應的 WebDriver 和瀏覽器。如果未設定這些環境變數,則將在 $PATH 中搜尋合適的 WebDriver 實作。

GECKODRIVER=path/to/geckodriver

使用 Firefox 進行無頭瀏覽器測試,並使用 geckodriver 作為其 WebDriver。

firefox 二進位檔必須在您的 $PATH 中。

在此處取得 geckodriver

CHROMEDRIVER=path/to/chromedriver

使用 Chrome 進行無頭瀏覽器測試,並使用 chromedriver 作為其 WebDriver。

chrome 二進位檔必須在您的 $PATH 中。

在此處取得 chromedriver

SAFARIDRIVER=path/to/safaridriver

使用 Safari 進行無頭瀏覽器測試,並使用 safaridriver 作為其 WebDriver。

這預設安裝在 Mac OS 上。它應該能夠依預設找到您的 Safari 安裝。

在遠端無頭瀏覽器中執行測試

測試可以在遠端 webdriver 上執行。為此,上述環境變數必須設定為遠端 webdriver 的 URL。例如

CHROMEDRIVER_REMOTE=http://remote.host/

在無頭瀏覽器中執行測試

一旦組態為在無頭瀏覽器中執行測試,並且設定了適當的環境變數,則執行無頭瀏覽器的測試與執行 Node.js 的測試相同

cargo test --target wasm32-unknown-unknown

除錯無頭瀏覽器測試

設定 NO_HEADLESS=1 環境變數,瀏覽器測試將不會以無頭模式執行。相反地,測試將啟動一個本機伺服器,您可以在您選擇的 Web 瀏覽器中造訪該伺服器,且不應使用無頭測試。然後,您可以使用瀏覽器的開發人員工具進行除錯。