在浏览器上对 Nativescript 应用程序逻辑进行单元测试

Unit testing Nativescript application logic on a browser

我正在尝试通过 ng test 在浏览器上为 Nativescript 应用程序设置单元测试,运行。问题是,每当有 tns-core-modules 或另一个插件导入时,由于平台特定文件(例如 "tns-core-modules/application/application.android.js")永远不会编译到包中,因此无法解析模块,因此会抛出类似的错误"Module not found: Error: Can't resolve 'tns-core-modules/application'".

我知道 Nativescript 中有内置的单元测试支持。我遇到的问题是它不能在 CI 上 运行。我希望能够对我的业务逻辑进行轻量级测试,模拟所有平台依赖项。 我一直在寻找一种在 运行 时间模拟模块导入的方法,但没有成功。我查看了 rewire 包,但它在节点上只有 运行s。

您根本无法 运行 浏览器上的 NativeScript 应用程序。

如果您正在寻找无头模式之类的东西,Appium 也有,isHeadless 功能。

请问您为什么认为您不能在 CI 上 运行 {N} 个单元测试?它也应该在 CI 上工作,毕竟它是一台 运行 基于某些触发器发出相同命令的机器。

我终于成功了。这不是一个非常优雅的解决方案,我还没有看到它需要多少维护。这里要点:

  1. 使用 tsconfig.jsonpaths 部分添加模拟导入 地点
  2. 在 mocks 目录中为任何未解析的模块创建文件
  3. 一些 nativescript 模块正在引用全局上的辅助函数 范围,但它们未定义。我的解决方案是在 test.ts 像这样
window['__decorate'] = () => {};
window['__extends'] = () => {};
window['__metadata'] = () => {};
window['__param'] = () => {};
window['layout_base_1'] = { CSSType: () => {} };
window['Crashlytics'] = {};
window['Fabric'] = {};