【问题标题】:Angular CLI create .spec files for already existing componentsAngular CLI 为已经存在的组件创建 .spec 文件
【发布时间】:2018-02-26 19:11:28
【问题描述】:

.angular-cli.json 中有一个选项可以禁用自动创建 *.spec 文件,例如组件见json schema

这是一个非常好的功能,因为个人(这只是我的观点)测试组件在快速发展的项目中可能不是真正值得的事情。

但有时我希望有一个选项为已经存在的组件/服务/管道/任何东西生成/重新创建相应的 *.spec 文件。

是否可以使用一些命令行调用?

创建了一个feature request,让我们看看它是怎么回事...

【问题讨论】:

  • 测试在快速发展的项目中很重要!当它成为一个大项目时,你会遇到副作用问题,它会成为一个增长缓慢的项目。 QED
  • 你是对的。可能是我表达的错误:当需求尚不清楚并且项目处于概念验证状态时,测试是一个真正的问题。这就是为什么能够稍后生成它们是件好事 :)

标签: angular angular-cli angular-unit-test


【解决方案1】:

有两种解决方案:

【讨论】:

    【解决方案2】:

    目前 Angular CLI 不提供此功能,尚不清楚如何以及何时可以以官方方式对其进行管理。

    但是,here is a library "ngx-spec" that generates the spec based on Angular CLI spec presets

    【讨论】:

      【解决方案3】:

      选择你要生成规范的目录,然后它将生成所有Angular规范。

      仅在spec文件不存在时生成文件,组件/指令/守卫/管道/服务跟随angular-cli文件生成名称。

      npm install -g angular-spec-generator
      
      angular-spec-generator 'C:\Users\Alan\Desktop\test'
      

      【讨论】:

        【解决方案4】:

        SimonTest 是 VS Code 的扩展,可为现有文件生成测试。我强烈推荐它(我与他们没有任何关系)。

        唯一的问题是它提供 30 天免费试用,之后需要付费许可证。

        【讨论】:

        • 是的,有问题。但是 SimonTest 并不是那么好。我用过,不是很满意。
        • 哇。这真太了不起了。谢谢你的建议。
        【解决方案5】:

        可以使用https://github.com/smnbbrv/ngx-spec为现有的.ts文件创建脚手架

        在 Angular 项目中安装:

        npm i -D ngx-spec@^2.0.0

        (-D 是 --save-dev 的简写)

        示例用法(用于服务):

        ng g ngx-spec:spec path/my.service

        ng g ngx-spec:spec path/my.service.ts

        对于服务,这不会设置要通过注入创建的测试。调整以使测试看起来像这样:

        import { TestBed, inject } from '@angular/core/testing';
        
        import { DataService } from './data.service';
        import { AuthService } from './auth.service';
        import { HttpClient, HttpHandler } from '@angular/common/http';
        
        describe('DataService', () => {
          beforeEach(() => {
            TestBed.configureTestingModule({
              providers: [DataService, AuthService, HttpClient, HttpHandler
              ]
            });
          });
        
          it('should be created', inject([DataService, AuthService], (service: DataService) => {
            expect(service).toBeTruthy();
          }));
        });
        

        这也意味着可以使用通配符生成测试,例如

        ng g ngx-specs '**/*

        这对我不起作用 - 请参阅 GitHub 问题:

        https://github.com/smnbbrv/ngx-spec/issues/10


        注意 - 作为实施测试驱动开发的一种策略,我发现搜索和删除所有现有的 *.spec.ts 文件是最简单的方法,这些文件是在初始阶段自动在 Angular 项目中创建的工件创建(通过在 Windows 资源管理器中搜索),然后作为起点,我使用 ngx-spec

        为主要的 Angular 数据提供程序服务创建了一个测试

        【讨论】:

          猜你喜欢
          • 2020-01-09
          • 2018-02-28
          • 2019-05-12
          • 1970-01-01
          • 2017-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多