-
-
Notifications
You must be signed in to change notification settings - Fork 1
Testing en
The mock feature installs a configurable fake Telegram.WebApp object on
window, so you can develop and test outside the Telegram client. Enable it:
telegram-webapp-sdk = { version = "0.11", features = ["mock"] }The mock lives under telegram_webapp_sdk::mock. Build a MockTelegramConfig
(it implements Default) and call mock_telegram_webapp, which injects
window.Telegram.WebApp with mocked initData, themeParams, platform, and
version. Use it only in debug builds.
use telegram_webapp_sdk::mock::{config::MockTelegramConfig, init::mock_telegram_webapp};
# fn run() -> Result<(), wasm_bindgen::JsValue> {
let config = MockTelegramConfig::default();
mock_telegram_webapp(config)?;
// window.Telegram.WebApp now exists — the SDK behaves as if inside Telegram.
# Ok(())
# }MockTelegramConfig exposes optional fields for the user, auth data, every
theme color, and the platform/version. A mocked user is a MockTelegramUser:
use telegram_webapp_sdk::mock::{
config::MockTelegramConfig, data::MockTelegramUser, init::mock_telegram_webapp,
};
# fn run() -> Result<(), wasm_bindgen::JsValue> {
let config = MockTelegramConfig {
user: Some(MockTelegramUser {
id: 42,
first_name: "Alice".into(),
username: Some("alice".into()),
language_code: Some("en".into()),
..Default::default()
}),
platform: Some("android".into()),
version: Some("9.6".into()),
..Default::default()
};
mock_telegram_webapp(config)?;
# Ok(())
# }You can also load the config from a TOML file (the same telegram-webapp.toml
that telegram_app! reads in debug builds):
use telegram_webapp_sdk::mock::config::MockTelegramConfig;
let config = MockTelegramConfig::from_file("telegram-webapp.toml")?;
# Ok::<(), std::io::Error>(())Because the SDK talks to browser globals, tests run in a headless browser via
wasm-bindgen-test. Add it as a dev-dependency:
[dev-dependencies]
wasm-bindgen-test = "0.3"Configure the tests to run in a browser and install the mock before exercising the SDK:
use telegram_webapp_sdk::{
core::init::init_sdk,
mock::{config::MockTelegramConfig, init::mock_telegram_webapp},
webapp::TelegramWebApp,
};
use wasm_bindgen_test::{wasm_bindgen_test, wasm_bindgen_test_configure};
wasm_bindgen_test_configure!(run_in_browser);
#[wasm_bindgen_test]
fn instance_is_available_after_mock() {
mock_telegram_webapp(MockTelegramConfig::default()).expect("mock installed");
init_sdk().expect("sdk initialized");
let app = TelegramWebApp::instance().expect("instance");
app.ready().expect("ready");
}Run the suite against a real browser engine:
# Chrome / Chromium
wasm-pack test --headless --chrome
# or Firefox
wasm-pack test --headless --firefox- Prefer
TelegramWebApp::instance()(returningOption) in app code so the same binary degrades gracefully when neither Telegram nor the mock is present. - Each
wasm_bindgen_testshares onewindow; install the mock at the start of every test that needs it rather than relying on ordering. - Note that
TelegramContext::initsucceeds only once per thread — design tests so they do not depend on re-initializing the global context.
- Quick Start — the code you are testing
-
Examples — the
examples/vanillaapp builds with themockfeature
Getting Started
Guide
Начало работы
Руководство