ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

NativeScript 仓库单元测试编写指南:Vitest、Nx 与 Node 环境下的平台模拟实践

NativeScript 仓库单元测试编写指南:Vitest、Nx 与 Node 环境下的平台模拟实践 【免费下载链接】NativeScript⚡ Write Native with TypeScript ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Flutter and you name it compatible.项目地址https://gitcode.com/gh_mirrors/na/NativeScript点击查看免费下载导读本文以 tools/notes/WritingUnitTests.md 为骨架系统讲解 NativeScript 仓库Nx 工作区中单元测试的组织方式、运行命令与编写规范。你将掌握如何用 Vitest 为nativescript/core等包编写与源码同目录的*.spec.ts测试、如何在纯 Node 环境下通过vitest.setup.ts模拟 iOS/Android 平台全局对象以及如何判断哪些行为应交给apps/automatede2e 套件而非单元测试。测试的组织方式与源码同目录的*.spec.tsNativeScript 仓库的单元测试遵循就近存放约定测试文件是标准的*.spec.ts与被测源码放在同一目录下覆盖工作区内的各个包packages/。典型示例packages/core/xml/index.spec.ts 与 packages/core/xml/index.ts 同目录packages/core/data/observable/index.spec.ts 覆盖 observable 模块类似的还有packages/core/css/parser.spec.ts、packages/core/css-mediaquery/index.spec.ts、packages/core/wgc/crypto/index.spec.ts等可通过find packages/core -name *.spec.ts查看全部 35 个左右测试文件。从 packages/core/project.json 的namedInputs可以看到production输入显式排除了!{projectRoot}/**/*.spec.ts说明测试文件不参与产物构建仅服务于测试与 lintlinttarget 同样把*.spec.ts纳入检查范围。这些测试使用 Vitest 编写并经由 Nx 按包粒度运行。运行测试Nx 与 Vitest 的命令组合环境准备先按 tools/notes/DevelopmentWorkflow.md 完成仓库初始化git clone后在仓库根目录执行npm run setup或通过npm start打开交互式命令菜单。运行某个包的测试 target以core包为例npx nx run core:testcore:testtarget 在 packages/core/project.json 中定义executor 为nx/vitest:test其 Vitest 配置位于包自己的 packages/core/vite.config.tsvite等其他包则使用vitest.config.ts。仓库的 nx.json 中为nx/vitest:test设置了cache: true及输入缓存因此重复运行会命中 Nx 缓存加速。监听模式watch modenpx nx run core:test --watch按 describe/it 名称隔离测试npx nx run core:test -t XmlParser-t--testNamePattern会过滤出 describe/it 名称匹配XmlParser的用例对应 packages/core/xml/index.spec.ts 中的describe(XmlParser, ...)块。该命令也可与--watch组合使用方便在开发时只盯着一个用例反复迭代。此外DevelopmentWorkflow.md还提供了等价的交互式入口npm start后输入过滤词core.test再回车即可运行nativescript.core.test。编写测试标准 Vitest API仓库默认开启 Vitest globalsglobals: true见 packages/core/vite.config.ts因此可以直接使用describe、it/test、expect、beforeEach、vi从vitest导入是可选的。官方文档给出的示例对应 packages/core/data/observable/index.spec.ts 的实测语义import { Observable } from .; describe(Observable, () { it(notifies a listener once, () { const observable new Observable(); let callCount 0; observable.once(test, () callCount); observable.notify({ eventName: test, object: observable }); observable.notify({ eventName: test, object: observable }); expect(callCount).toBe(1); }); });该用例验证once监听器在notify两次后仅被调用一次正是 observable 事件机制的核心语义。异步测试就是普通的async函数——直接return或await你的 promise并在其上断言结果不需要额外的包装器。真实测试的写法参考packages/core/xml/index.spec.ts 展示了更贴近实战的结构外层describe(XmlParser, ...)内再按Vanilla与Angular两种语法风格分组每个分组在beforeEach中重建解析器实例用it覆盖实体解析、引号内尖括号、[property]/(event)绑定等边界场景。这种分组 beforeEach 重置状态 语义断言的模式在仓库中广泛复用例如packages/core/ui/styling/css-selector.spec.ts、packages/core/native-window/native-window.ios.spec.ts等。测试环境Node 下的平台模拟单元测试运行在 Node 进程中而不是真机或模拟器上。真实 iOS/Android API 在 Node 里并不存在因此仓库通过 packages/core/vitest.setup.ts在 packages/core/vite.config.ts 中以setupFiles: [vitest.setup.ts]注入对平台全局进行桩替换让核心模块能够顺利加载。从该文件可以梳理出完整的模拟清单平台开关变量__UNIT_TEST__ true、__ANDROID__ false、__IOS__ true、__VISIONOS__ false、__APPLE__ true、__COMMONJS__ false、__DEV__ true以及默认解析器开关__CSS_PARSER__ css-tree注释说明真实 app 中由打包器注入css-tree 是默认解析器。Crypto 相关vi.stubGlobal(crypto, { randomUUID: ... })让依赖 crypto 的模块在测试中稳定通过同时桩了 iOS 的SecRandomCopyBytes、NSCCrypto与 Android 的org.nativescript.winter_tc.Crypto并附带说明——翻转__ANDROID__即可在同一份 spec 中覆盖wgc/crypto的平台分支对应 packages/core/wgc/crypto/index.spec.ts。iOS 最小表面NSObject、NSString、NSData各 selector 工厂记录所用 selector 与参数供 spec 断言不同字节所有权语义、NSFileManager、NSNotificationCenter、NSBundle、NSURLSessionConfiguration、NSOperationQueue等。其中NSOperationQueue.mainQueue.addOperationWithBlock会立即同步执行传入的 block保证依赖主队列调度的逻辑可被确定性断言。UIKit 桩UIApplication、UIDevice、UIScreen默认 1000×1000、scale 1、UIInterfaceOrientation、UIColor、UIViewController、UIGestureRecognizer系列以及UIContentSizeCategory*系列常量用于字号相关的样式计算测试。其他工具interop.Reference/interop.types、NativeScriptGlobals.events、WeakRef.prototype.get deref让WeakRef在 Node 下的行为贴近浏览器/原生语义。如果测试需要更多的原生表面扩展该 setup 文件中的 mock 即可——这正是文档明确指出的做法。值得注意的是 packages/core/vite.config.ts 还针对性能测试做了特殊处理VITEST_NO_OPT1时通过execArgv: [--max-opt0]以解释器模式V8 jitless运行 worker模拟 iOS 的执行方式服务于 packages/core/tests/benchmarks 中的基准测试。边界划分单元测试与 e2e 的取舍依赖真实原生运行时的行为不属于单元测试范畴应当放入 e2e 套件e2e 载体apps/automated自动化 e2e 测试 app另有apps/ui与apps/toolbox用于本地实验与确认场景详见 tools/notes/DevelopmentWorkflow.md运行方式npx nx run apps-automated:ios或npx nx run apps-automated:android测试内容例如 apps/automated/src/ui 下的页面级交互、真实布局测量、平台 API 调用等。判断原则很简单能用 Node mock 稳定验证的纯逻辑事件通知、XML 解析、CSS 选择器匹配、crypto 数据流走单元测试必须触碰真实 UIKit/Android View 的行为走 e2e。小结NativeScript 仓库的单元测试体系可以概括为三条约定*.spec.ts与源码同目录就近存放用 Vitest 标准 APIglobals 已开启编写经 Nx 的testtarget 按包运行测试跑在 Node 中由 packages/core/vitest.setup.ts 提供平台全局桩需要更多原生表面时扩展该文件而真正依赖原生运行时行为的部分则移交 apps/automated e2e 套件。理解这套约定后你可以快速为任一packages/core模块补上覆盖边界场景的 spec并用-t参数精确迭代单个用例。赞分享【免费下载链接】NativeScript⚡ Write Native with TypeScript ✨ Best of all worlds (TypeScript, Swift, Objective C, Kotlin, Java, Dart). Use what you love ❤️ Angular, React, Solid, Svelte, Vue with: iOS (UIKit, SwiftUI), Android (View, Jetpack Compose), Flutter and you name it compatible.项目地址https://gitcode.com/gh_mirrors/na/NativeScript点击查看免费下载相关推荐Sentry JavaScript 仓库测试编写指南Vitest 单元测试、Playwright E2E 与 Node 集成测试的工程实践Sentry JavaScript 仓库测试编写指南Vitest 单元测试、Playwright E2E 与 Node 集成测试的工程实践 导读 本文档是 s可观测性NativeScript 单元测试实战指南基于 Vitest 与 Nx 的 Spec 测试体系NativeScript 单元测试实战指南基于 Vitest 与 Nx 的 Spec 测试体系 本指南聚焦 NativeScript 仓库 gh_mirro如何捕获网页里的隐藏视频与音频猫抓浏览器资源嗅探扩展上手指南如何捕获网页里的隐藏视频与音频猫抓浏览器资源嗅探扩展上手指南 晚上十点半公开课刚播完你鼠标移到播放器角落的下载图标弹出一行灰字仅支持在线播放。翻网音视频上一篇百度网盘下载加速终极指南免费工具实现满速下载下一篇3个高效歌词管理方案这款开源工具如何帮你节省90%时间创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表