在这个NativeScript代码共享项目中运行“ng测试”时,为什么要导入.tns文件?

在这个NativeScript代码共享项目中运行“ng测试”时,为什么要导入.tns文件?,nativescript,angular2-nativescript,nativescript-codesharing,Nativescript,Angular2 Nativescript,Nativescript Codesharing,我有一个NativeScript代码共享项目。我希望对使用ng测试的web版本使用Karma单元测试。由于在构建测试时错误地导入了服务的.tns版本,因此此操作失败 以下是在最小NativeScript代码共享项目中重新创建问题的步骤 创建新的NativeScript代码共享项目 $ ng new -c=@nativescript/schematics ns-shared-test --shared 输入项目文件夹 $ cd ns-shared-test 生成新服务 $ ng generat

我有一个NativeScript代码共享项目。我希望对使用ng测试的web版本使用Karma单元测试。由于在构建测试时错误地导入了服务的.tns版本,因此此操作失败

以下是在最小NativeScript代码共享项目中重新创建问题的步骤

创建新的NativeScript代码共享项目

$ ng new -c=@nativescript/schematics ns-shared-test --shared
输入项目文件夹

$ cd ns-shared-test
生成新服务

$ ng generate service services/my-service
生成一个新组件

$ ng generate component my-component
修改my-component.component.ts以使用我的服务

$ cp src/app/services/my-service.service.ts src/app/services/my-service.service.tns.ts
在文件顶部添加:

import { MyServiceService } from '@src/app/services/my-service.service';
import { Color } from 'tns-core-modules/color/color';
并替换构造函数:

constructor( private myService:MyServiceService ) { }
constructor() { new Color('white'); }
运行单元测试

$ ng test
$ ng test
观察测试是否通过 分摊我的服务

$ cp src/app/services/my-service.service.ts src/app/services/my-service.service.tns.ts
修改my-service.service.tns.ts以使用特定于NativeScript的内容

在文件顶部添加:

import { MyServiceService } from '@src/app/services/my-service.service';
import { Color } from 'tns-core-modules/color/color';
并替换构造函数:

constructor( private myService:MyServiceService ) { }
constructor() { new Color('white'); }
运行单元测试

$ ng test
$ ng test
加载NativeScript模块时,请注意测试失败
对我有效的解决方案是:

将“my-service.service.ts”重命名为my-service.service.web.ts 在my web组件中,从'@src/app/services/my service.service.web'导入{MyServiceService}; 在规范文件中,从'@src/app/services/my service.service.web'导入{myservices}
ng test命令现在应该可以工作了

这似乎确实按照您的建议工作。采用这种方法有什么缺点吗?这会以任何方式影响代码共享策略吗?单元测试还能在手机上运行吗?很抱歉,响应太晚了。缺点可能是,在您创建的每个服务或组件中,您必须明确表示它是用于web或mobile的。如果您有一个组件,并且您有一个通过构造函数注入的服务。在该服务中,您有一些移动库,您必须为移动部件创建另一个服务。