ไฟล์ "spec.ts" ที่สร้างโดย Angular CLi มีไว้เพื่ออะไร?


210

ฉันใหม่กับ Angular 2 (และโดยทั่วไปแล้ว Angular ... ) และฉันพบว่ามันน่าดึงดูดมาก ฉันใช้Angular CLiเพื่อสร้างและให้บริการโครงการ ดูเหมือนว่าจะทำงานได้ดี - แม้ว่าสำหรับโครงการเรียนรู้เล็ก ๆ น้อย ๆ ของฉันมันผลิตได้มากกว่าที่ฉันต้องการ - แต่คาดว่าจะเป็นเช่นนั้น

ฉันสังเกตเห็นว่ามันสร้างขึ้นspec.tsสำหรับองค์ประกอบเชิงมุมแต่ละอันในโครงการ (Component, Service, Pipe, ฯลฯ ) ฉันค้นหาไปแล้วแต่ไม่พบคำอธิบายว่าไฟล์เหล่านี้มีไว้เพื่ออะไร

ไฟล์บิลด์เหล่านี้ซึ่งปกติจะซ่อนอยู่เมื่อใช้งานtscหรือไม่ ฉันสงสัยเพราะฉันต้องการเปลี่ยนชื่อของชื่อที่ไม่ดีที่Componentฉันสร้างขึ้นและค้นพบว่าชื่อนั้นถูกอ้างอิงในspec.tsไฟล์เหล่านี้ด้วย


import {
  beforeEach,
  beforeEachProviders,
  describe,
  expect,
  it,
  inject,
} from '@angular/core/testing';
import { ComponentFixture, TestComponentBuilder } from '@angular/compiler/testing';
import { Component } from '@angular/core';
import { By } from '@angular/platform-browser';
import { PovLevelComponent } from './pov-level.component';

describe('Component: PovLevel', () => {
  let builder: TestComponentBuilder;

  beforeEachProviders(() => [PovLevelComponent]);
  beforeEach(inject([TestComponentBuilder], function (tcb: TestComponentBuilder) {
    builder = tcb;
  }));

  it('should inject the component', inject([PovLevelComponent],
      (component: PovLevelComponent) => {
    expect(component).toBeTruthy();
  }));

  it('should create the component', inject([], () => {
    return builder.createAsync(PovLevelComponentTestController)
      .then((fixture: ComponentFixture<any>) => {
        let query = fixture.debugElement.query(By.directive(PovLevelComponent));
        expect(query).toBeTruthy();
        expect(query.componentInstance).toBeTruthy();
      });
  }));
});

@Component({
  selector: 'test',
  template: `
    <app-pov-level></app-pov-level>
  `,
  directives: [PovLevelComponent]
})
class PovLevelComponentTestController {
}

คำตอบ:


265

ไฟล์ข้อมูลจำเพาะเป็นการทดสอบหน่วยสำหรับไฟล์ต้นฉบับของคุณ แบบแผนสำหรับแอปพลิเคชันเชิงมุมคือการมีไฟล์. spec.ts สำหรับแต่ละไฟล์. ts พวกเขาจะทำงานโดยใช้กรอบการทดสอบจัสมินจัสมินผ่านทางนักวิ่งทดสอบกรรม ( https://karma-runner.github.io/ ) เมื่อคุณใช้ng testคำสั่ง

คุณสามารถใช้สิ่งนี้สำหรับการอ่านเพิ่มเติม:

https://angular.io/guide/testing


17
ขอบคุณฉันสงสัยตัวเอง สมมติว่าฉันไม่ต้องการเรียกใช้การทดสอบใด ๆ ฉันสามารถลบไฟล์. spec ได้อย่างปลอดภัยหรือไม่ (และยังรวมถึงโฟลเดอร์ทดสอบและไฟล์เช่นโฟลเดอร์ e2e ด้วย)
Kokodoko

7
ฉันรู้สึกเหมือนคำถามนี้ต้องการคำตอบอีกเล็กน้อย เราสามารถเพิกเฉยต่อไฟล์เหล่านี้ทั้งหมดและทำงานของเราได้หรือไม่?
Mateusz Migała

18
ดังที่ระบุไว้ไฟล์ข้อมูลจำเพาะนั้นมีไว้สำหรับการทดสอบแอปพลิเคชันของคุณ หากคุณไม่ต้องการใช้ไฟล์ทดสอบคุณสามารถลบหรือเพิกเฉยได้ โครงการของคุณจะทำงานต่อไปได้โดยไม่มีไฟล์ข้อมูลจำเพาะ
dennismuijs

33
เมื่อคุณสร้างส่วนประกอบใหม่ด้วย CLI คุณสามารถเพิ่ม--spec=falseเพื่อแยกการสร้างไฟล์ข้อมูลจำเพาะ ng g component comp-name --spec=falseคำสั่งเต็มรูปแบบสำหรับการสร้างองค์ประกอบใหม่จะเป็น: ข้อมูลเพิ่มเติมที่นี่: github.com/angular/angular-cli/wiki/generate-component
Dean

11
สิ่งนี้สามารถปิดใช้งานได้โดยการแก้ไขangular-cli.jsonเช่นนี้:{ "defaults": { "component": { "spec": false } } }
Ali Sherafat

20

หากคุณสร้างโครงการเชิงมุมใหม่โดยใช้ "ng ใหม่" คุณอาจข้ามการสร้างไฟล์ spec.ts สำหรับสิ่งนี้คุณควรใช้ตัวเลือก --skip-tests

ใหม่ ng-app-name --skip-tests


1
คุณสามารถตั้งค่าตัวเลือกนี้หลังจากสร้างโครงการได้หรือไม่
HughHughTeotl

2

ไฟล์. spec.ts ใช้สำหรับการทดสอบหน่วยสำหรับแต่ละส่วนประกอบ ng testคุณสามารถเรียกใช้งานพลังน้ำใจวิ่งผ่าน เพื่อที่จะดูรหัสครอบคลุมของกรณีทดสอบหน่วยสำหรับส่วนประกอบเฉพาะที่เรียกใช้ng test --code-coverage


0

.spec.tsไฟล์ถูกใช้สำหรับunit testingแอปพลิเคชันของคุณ

หากคุณไม่ได้จะได้รับมันสร้างเพียงแค่ใช้ในขณะที่สร้างใหม่--spec=false Componentแบบนี้

ng generate component --spec=false mycomponentName
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.