Skip to content

9. Testing

RAprogramm edited this page Nov 4, 2025 · 1 revision

Chapter 9: Testing

Test your Telegram Mini App without deploying.

Mock Environment

Enable mock feature for testing:

[dependencies]
telegram-webapp-sdk = { version = "0.3", features = ["mock"] }

Basic Mock Setup

#[cfg(feature = "mock")]
use telegram_webapp_sdk::mock::{init_mock, MockConfig, MockUser};

#[cfg(feature = "mock")]
fn setup_test_env() {
    init_mock(MockConfig {
        user: Some(MockUser {
            id: 12345,
            first_name: "Test".into(),
            last_name: Some("User".into()),
            username: Some("testuser".into()),
            language_code: Some("en".into()),
            is_premium: Some(true),
            ..Default::default()
        }),
        platform: "ios",
        version: "7.0",
        ..Default::default()
    });
}

WASM Tests

#[cfg(test)]
mod tests {
    use wasm_bindgen_test::*;
    use telegram_webapp_sdk::TelegramWebApp;

    wasm_bindgen_test_configure!(run_in_browser);

    #[wasm_bindgen_test]
    fn test_user_data() {
        init_mock(MockConfig::default());
        
        let webapp = TelegramWebApp::new();
        let user = webapp.init_data_unsafe().user;

        assert!(user.is_some());
    }
}

Integration Tests

Test complete user flows:

#[wasm_bindgen_test]
async fn test_checkout_flow() {
    init_mock(MockConfig::default());

    // 1. Add item to cart
    cloud_storage::set_item("cart", r#"{"quantity": 2}"#, |success| {
        assert!(success);
    }).await;

    // 2. Read cart
    cloud_storage::get_item("cart", |value| {
        assert_eq!(value, Some(r#"{"quantity": 2}"#.to_string()));
    }).await;

    // 3. Checkout
    let webapp = TelegramWebApp::new();
    webapp.show_confirm("Checkout?", |confirmed| {
        assert!(confirmed);
    });
}

Local Development

Hot Reload

trunk serve --open

Changes to Rust code trigger automatic recompilation and browser refresh.

Debug Mode

#[cfg(debug_assertions)]
use telegram_webapp_sdk::logger;

#[cfg(debug_assertions)]
logger::log("Debug: user logged in");

CI/CD Testing

# .github/workflows/test.yml
name: Tests

on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - run: cargo test
      - run: cargo test --target wasm32-unknown-unknown

Home

Clone this wiki locally