首页 > 其他分享 >Tauri教程-基础篇-第六节 Tauri的调试与测试

Tauri教程-基础篇-第六节 Tauri的调试与测试

时间:2025-01-13 17:32:56浏览次数:3  
标签:tauri 教程 code dev Tauri import 第六节 调试

请添加图片描述

“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
“有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
“维持现状意味着空耗你的努力和生命。”——纪伯伦

Tauri 技术教程 * 第四章 Tauri的基础教程
第六节 Tauri的调试与测试

一. 概述

在本章节的内容中,我们将探讨如何在Tauri的项目中进行测试与调试。

二. 调试

在项目的开发过程中,我们经常需要在项目中对编写的代码进行调试,那么在Tauri项目中,既包含前端部分又包含后端部分,那如何进行功能流程的调试呢?在开发工具中又是如何配置的?

在Tauri项目中前端项目的调试主要依赖于webview的开发者工具来实现的,如:f12,而后端应用的调试主要借助于当下使用的开发工具。(这里的后端主要说的是rust服务代码)

1. WebView 控制台

tauri的webview控制台在开发或调试模式下是打开的,在生产环境下是关闭的,想开启的可以使用第二种方式,即:Cargo !

  • 通过F12的方式打开和关闭控制台;

  • 通过编程方式打开 DevTools

    您可以使用WebviewWindow::open_devtoolsWebviewWindow::close_devtools函数控制检查器窗口的可见性:

    tauri::Builder::default()
      .setup(|app| {
        #[cfg(debug_assertions)] // only include this code on debug builds
        {
          let window = app.get_webview_window("main").unwrap();
          window.open_devtools();
          window.close_devtools();
        }
        Ok(())
      });
    

2. Rust开发调试

  • 打印输出信息,在Rust中输出信息到控制台,这里的控制台一般为编译器的控制台

    println!("Message from Rust: {}", msg);
    
  • Rust代码中支持仅运行在开发模式下的代码,方式如下:

    fn main() {
      // Whether the current instance was started with `tauri dev` or not.
      #[cfg(dev)]
      {
        // `tauri dev` only code
      }
      if cfg!(dev) {
        // `tauri dev` only code
      } else {
        // `tauri build` only code
      }
      let is_dev: bool = tauri::is_dev();
    
      // Whether debug assertions are enabled or not. This is true for `tauri dev` and `tauri build --debug`.
      #[cfg(debug_assertions)]
      {
        // Debug only code
      }
      if cfg!(debug_assertions) {
        // Debug only code
      } else {
        // Production only code
      }
    }
    

3. 调试工具

调试工具的使用以及配置大家可以参考下官方文档:

在这里我比较推荐大家使用 CrabNebula DevTools,使用方式可以参考:https://docs.crabnebula.dev/devtools/get-started/

这类我们阐述下在VScode 中如何进行调试。

  • 第一步:安装插件

    在插件市场中 搜索CodeLLDB,并安装:codelldb-win32-x64.vsix, 需要从GitHUb 下载,比较慢;这里我提前下载好了,并推荐离线安装:

    下载地址:https://download.csdn.net/download/sxlesq/90250270?spm=1001.2014.3001.5503

    离线安装方式

    PS D:\elcker\Software\apps\VSCode\bin> .\code --install-extension ..\codelldb-win32-x64.vsix
    Installing extensions...
    Extension 'codelldb-win32-x64.vsix' was successfully installed.
    PS D:\elcker\Software\apps\VSCode\bin>
    
  • 第二步:插件配置

    在项目根目录下创建 .vscode 文件,在文件下创建 launch.json 和 task.json 文件

    • launch.json
    {
      "version": "0.2.0",
      "configurations": [
        {
          "type": "lldb",
          "request": "launch",
          "name": "Tauri Development Debug",
          "cargo": {
            "args": [
              "build",
              "--manifest-path=./src-tauri/Cargo.toml",
              "--no-default-features"
            ]
          },
          "preLaunchTask": "ui:dev"
        },
        {
          "type": "lldb",
          "request": "launch",
          "name": "Tauri Production Debug",
          "cargo": {
            "args": ["build", "--release", "--manifest-path=./src-tauri/Cargo.toml"]
          },
          "preLaunchTask": "ui:build"
        }
      ]
    }
    
    
    • task.json

      {
        "version": "2.0.0",
        "tasks": [
          {
            "label": "ui:dev",
            "type": "shell",
            "isBackground": true,
            "command": "pnpm",
            "args": ["dev"]
          },
          {
            "label": "ui:build",
            "type": "shell",
            "command": "pnpm",
            "args": ["build"]
          }
        ]
      }
      
      
  • 第三步: 添加断点进行调试,前端页面触发就可以使用

在这里插入图片描述

三 . 测试

测试在项目开发过程中也比较普遍,通常我们会进行功能的单元测试和集成测试,在Tauri 中提供了利用WebDriver协议进行端到端的测试。但在macos中暂不支持。

1. Tauri Api的模拟

在前端测试中,我们需要编写一些 模拟数据或者模拟环境来进行测试,在Tauri 中他利用 @tauri-apps/api/mocks模块提供增强。

但是要注意:次测试运行后清除模拟,以撤消运行之间的模拟状态变化!

1)IPC请求模拟

在IPC模拟中,我们可能会碰到以下2中情况:

  • 确保进行正确的后端调用
  • 模拟后端函数的不同结果

Tauri 提供了 mockIPC 函数来拦截 IPC 请求,具体 API 的详细信息可以在这里查看。

以下是一个IPC模拟示例:

import { beforeAll, expect, test, vi } from "vitest";
import { randomFillSync } from "crypto";

import { mockIPC } from "@tauri-apps/api/mocks";
import { invoke } from "@tauri-apps/api/core";

// jsdom doesn't come with a WebCrypto implementation
beforeAll(() => {
  Object.defineProperty(window, 'crypto', {
    value: {
      // @ts-ignore
      getRandomValues: (buffer) => {
        return randomFillSync(buffer);
      },
    },
  });
});


test("invoke", async () => {
  mockIPC((cmd, args) => {
    // simulated rust command called "add" that just adds two numbers
    if(cmd === "add") {
      return (args.a as number) + (args.b as number);
    }
  });

  // we can use the spying tools provided by vitest to track the mocked function
  const spy = vi.spyOn(window, "__TAURI_INTERNALS__.invoke");

  expect(invoke("add", { a: 12, b: 15 })).resolves.toBe(27);
  expect(spy).toHaveBeenCalled();
});

2)窗口模拟

可以使用该mockWindows()方法创建假窗口标签。第一个字符串标识“当前”窗口(即您的 JavaScript 认为的窗口)

mockWindows()仅伪造窗口的存在,但没有窗口属性。要模拟窗口属性,您需要使用以下方法拦截正确的调用mockIPC()

以下是一个窗口模拟示例:

import { beforeAll, expect, test } from 'vitest';
import { randomFillSync } from 'crypto';

import { mockWindows } from '@tauri-apps/api/mocks';

// jsdom doesn't come with a WebCrypto implementation
beforeAll(() => {
  Object.defineProperty(window, 'crypto', {
    value: {
      // @ts-ignore
      getRandomValues: (buffer) => {
        return randomFillSync(buffer);
      },
    },
  });
});

test('invoke', async () => {
  mockWindows('main', 'second', 'third');

  const { getCurrent, getAll } = await import('@tauri-apps/api/webviewWindow');

  expect(getCurrent()).toHaveProperty('label', 'main');
  expect(getAll().map((w) => w.label)).toEqual(['main', 'second', 'third']);
});

2. WebDriver

WebDriver是一种标准化接口,主要用于与 Web 文档交互,主要用于自动化测试。Tauri通过利用跨平台包装器下的本机平台的WebDriver服务器来支持WebDriver接口。

1. 安装依赖

cargo install tauri-driver --locked

确保获取与应用程序正在构建和测试的 Windows Edge 版本相匹配的Microsoft Edge 驱动程序版本。这几乎总是最新 Windows 安装中的最新稳定版本。如果两个版本不匹配,您可能会在尝试连接时遇到 WebDriver 测试套件挂起的情况。

2. 详细使用方法

  • 最好测试demo获取:https://github.com/chippers/hello_tauri。

  • 使用流程:WebDriver示例

    它不是我们学习的重点,这里了解下。官方使用的是; https://www.selenium.dev/

    有时间,我们会单独探讨下:Selenium(WEB自动化工具)*

标签:tauri,教程,code,dev,Tauri,import,第六节,调试
From: https://blog.csdn.net/sxlesq/article/details/145111941

相关文章

  • 电脑老是弹出360广告怎么办?试试教程中的方法关闭广告
    在日常使用电脑的过程中,弹窗广告不仅会影响用户体验,还可能带来潜在的安全风险。对于使用360安全卫士的用户来说,幸运的是,有多种方式可以有效地减少或完全阻止这些烦人的广告弹窗。本文将介绍两种简单的方法来帮助您实现这一目标:一是下载并使用360安全卫士极速版;二是通过软件内部......
  • 万字详解内网渗透该怎么学!黑客技术零基础入门到精通实战教程建议收藏!
    前言:本文主要记录了作者之前在内网渗透的一个全方面的学习过程,包括如何从外网找到入口点,之后如何提权,然后如何在内网中进行一个信息收集,当存在域的情况下又是怎么收集信息,然后通过代理来进一步横向,不论是一层代理还是两层,本文都有涉及,以及一些常见的代理工具的使用方法、权......
  • 实战自动化加解密&加密场景下的暴力破解,黑客技术零基础入门到精通实战教程!
    场景拿到一个站,请求和响应中的数据均经过加密,但是我们想在测试中看到明文数据并可以修改前两天看到有个师傅的使用双层mitmproxy代理实现自动化加解密的思路,今天来实现一下。顺便回忆一下该场景下使用Yakit热加载进行数据暴力破解。思路请求:设置下游代理捕获浏览器......
  • 老奶奶看了都会的WSL2连接USB设备教程!
    老奶奶看了都会的WSL2-Ubuntu连接USB设备教程!作者:SkyXZCSDN:SkyXZ~-CSDN博客博客园:SkyXZ-博客园参考资料:微软官方文档连接USB设备|MicrosoftLearn        在Win11上用WSL2安装Ubuntu来开发简直不要太爽!!!但是很多小伙伴会发现,欸~为什么我在宿主机上插入的USB设......
  • 2025 最新域名出售交易平台系统源码 修复版 附教程
    亲测前后端正常搭建展示使用,感兴趣的下载研究学习......
  • 【最详细ComfyUI教程】2025年腾讯大佬花了一周时间整理的ComfyUI保姆级教程!
    前言:在当今快速发展的社会,掌握一项实用的技能对于安身立足至关重要。很多人推荐学习编程、数据分析等技术,但其中最引人瞩目的当属人工智能(AI)。特别是AI绘画,融合了艺术与科技,成为了当今最具潜力的领域之一。通过学习AI绘画,你不仅可以探索创意的无限可能,还能在科技驱动的市......
  • 黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
       这篇文章没有什么套路。就是一套自学理论和方向,具体的需要配合网络黑白去学习。毕竟是有网络才会有黑白!有自学也有培训!1.打死也不要相信什么分分钟钟教你成为大黑阔的,各种包教包会的教程,就算打不死也不要去购买那些......
  • 微信防撤回保姆级教程
    目录前言:跑去给喜欢的人发一大堆消息,女神发了一句消息又撤回,再发了一句:我们不合适。为了防止你发的一堆消息不能撤回,不能查看女神撤回的消息,请试试撤回和防撤回功能。查看微信版本选择插件更换插件进行测试前言:跑去给喜欢的人发一大堆消息,女神发了一句消息又撤回,再发了......
  • LX Music保姆级安装教程(建议收藏)
    关于软件安装包的获取我之前有分享过免费且开源的音乐播放器LXMusic_lxmusic-CSDN博客软件安装1、下载好安装包后双击点开这个后缀为.exe的文件2、点击我同意3、点击“仅为我安装”后点击下一步4、修改软件安装路径后点击安装(建议安装到除系统盘C盘以外的其他磁盘)5......
  • Python实现鸢尾花数据集可视化分析(超详细教程)
     目录一、下载数据集二、本文总代码三、连续变量可视化3.1散点图3.1.1定义3.1.2代码3.1.3代码解析3.1.4结果展示3.22D曲线图3.2.1定义3.2.2代码3.2.3代码解析3.2.4结果展示3.3分组直方图3.3.1定义3.3.2代码3.3.3代码解析3.3.4结果展示3.4......