Deeplink Testing
The service provides the ability to test custom protocol handlers and deeplinks in your Dioxus application using the browser.dioxus.triggerDeeplink() method.
Overview
What Is Deeplink Testing?
Deeplink testing allows you to verify that your Dioxus application correctly handles custom protocol URLs (e.g., myapp://action?param=value). This is essential when your app registers as a protocol handler and needs to respond to URLs opened from external sources.
When Should You Use It?
Use browser.dioxus.triggerDeeplink() when you need to:
- Test that your app correctly handles custom protocol URLs
- Verify deeplink parameter parsing and routing logic
- Test protocol handler registration and activation
- Validate deeplink-driven workflows in your application
Prerequisites
Protocol Registration
Your Dioxus app must register its custom protocol scheme with the operating system. The mechanism depends on your app's packaging setup — consult your OS or Dioxus desktop documentation for registering a URL scheme handler.
Basic Usage
Simple Example
describe('Protocol Handler Tests', () => {
it('should handle custom protocol deeplinks', async () => {
await browser.dioxus.triggerDeeplink('myapp://open?file=test.txt');
await browser.waitUntil(async () => {
const openedFile = await browser.dioxus.execute(() => {
return globalThis.lastOpenedFile;
});
return openedFile === 'test.txt';
}, {
timeout: 5000,
timeoutMsg: 'App did not handle the deeplink',
});
});
});
Complex URL Parameters
it('should preserve query parameters', async () => {
await browser.dioxus.triggerDeeplink(
'myapp://action?param1=value1¶m2=value2'
);
const receivedParams = await browser.dioxus.execute(() => {
return globalThis.lastDeeplinkParams;
});
expect(receivedParams.param1).toBe('value1');
expect(receivedParams.param2).toBe('value2');
});
Error Handling
it('should reject invalid protocols', async () => {
await expect(
browser.dioxus.triggerDeeplink('https://example.com')
).rejects.toThrow('Invalid deeplink protocol');
});
Platform Behavior
The service handles platform-specific differences automatically: