เรียกใช้ไฟล์ทดสอบไฟล์เดียว


139

มีวิธีเรียกใช้ng testไฟล์เดียวแทนที่จะเป็นชุดทดสอบทั้งหมดหรือไม่ ตามหลักการแล้วฉันต้องการรับลูปข้อเสนอแนะที่เร็วที่สุดเท่าที่จะเป็นไปได้เมื่อฉันแก้ไขไฟล์ แต่karmaดำเนินการทั้งชุดในการบันทึกแต่ละครั้งซึ่งค่อนข้างช้าเมื่อคุณสร้างชุดทดสอบที่ใหญ่พอ


ซึ่งแตกต่างจากHow to execute only test spec with angular-cliในคำถามนั้นเกี่ยวกับการเรียกใช้ข้อมูลจำเพาะแต่ละรายการ นี่เกี่ยวกับการเรียกใช้ไฟล์แต่ละไฟล์ การแก้ปัญหาเกี่ยวข้องกับคุณสมบัติเฉพาะของจัสมินเหมือนกัน แต่ลักษณะของคำถามแตกต่างกันเล็กน้อย


อาจซ้ำกันได้ของHow to execute only test spec with angular-cli
dota2pro

คุณสามารถหาคำตอบได้ที่นี่: stackoverflow.com/questions/40683673/…
Sahil Shikalgar

คุณสามารถหาคำตอบได้ที่นี่: stackoverflow.com/questions/40683673/…
Sahil Shikalgar

คำตอบ:


263

ฉันค้นพบว่าจัสมินช่วยให้คุณสามารถใช้คำนำหน้าdescribeและitวิธีการด้วยf(เพื่อโฟกัส?) ดังนั้นfdescribeและfit. หากคุณใช้อย่างใดอย่างหนึ่งกรรมจะทำการทดสอบที่เกี่ยวข้องเท่านั้น ดังนั้นเพื่อมุ่งเน้นไฟล์ปัจจุบันคุณก็สามารถใช้ระดับด้านบนและเปลี่ยนเป็นdescribe fdescribeใช้งานได้ตามวัตถุประสงค์ของฉัน


9
คำตอบในตำนาน
danday74

2
ไม่อยากจะเชื่อเลยว่าฟังก์ชันที่สำคัญดังกล่าวจะไม่ชัดเจนและตรงไปตรงมา
เถ้า

10
มันใช้งานได้ แต่ไม่เหมาะเพราะคุณต้องเปลี่ยนซอร์สโค้ดและคุณสามารถตรวจสอบโค้ดที่แก้ไขในซอร์สคอนโทรลได้
Marco Altieri

4
กรุณาเพิ่มการเชื่อมโยงไปเอกสารอย่างเป็นทางการเมื่อเป็นไปได้
jgpATs2w

ฉันกำลังค้นหาสิ่งนี้ยอดเยี่ยม
Carlos E

26

เป็นมูลค่าการกล่าวขวัญว่าคุณสามารถปิดการทดสอบโดยไม่ต้องแสดงความคิดเห็นโดยxdescribeและxit

xdescribe('Hello world', () => { 
  xit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

และอย่างที่ใครบางคนเคยพูดไว้แล้วว่าคุณต้องการมุ่งเน้นไปที่การทดสอบบางอย่างแล้วfdescribeหรือยังfit

fdescribe('Hello world', () => { 
  fit('says hello', () => { 
    expect(helloWorld())
        .toEqual('Hello world!');
  });
});

25

วันนี้สามารถทำได้ผ่านทางincludeตัวเลือก https://angular.io/cli/test#options

เป็นการจับคู่ลูกโลกเพื่อเป็นตัวอย่าง:

ng test --include='**/someFolder/*.spec.ts'

ฉันไม่สามารถหาได้ในบันทึกประจำรุ่น 8.1.0แต่ @Swoox 8.1.0กล่าวถึงด้านล่างนี้เป็นคุณลักษณะหลังจากรุ่น ขอขอบคุณที่ทราบ


1
ดูเหมือนว่าจะเป็นการอัปเดตล่าสุด อาจต้องการรวมเวอร์ชันที่จำเป็น จำเป็นต้องใช้ CLI 8.1
Swoox

ดูเหมือนว่าจะถูกลบออกใน v9.1 :(
rmcsharry

2
ฉันเพิ่งทดสอบสิ่งนี้ใน CLI v9.1.0 และทำงานได้อย่างสมบูรณ์แบบ
Sajjan Singh

9

ฉันพบว่าng testมีตัวเลือกเพิ่มเติม--includeที่คุณสามารถใช้เพื่อให้สามารถเรียกใช้การทดสอบสำหรับไฟล์เดียวหรือสำหรับไดเร็กทอรีเฉพาะหรือสำหรับไฟล์จำนวนมาก:

// one file
npm run test -- --include src/app/components/component/component-name.component.spec.ts

// directory or bunch of files
npm run test -- --include src/app/components

ng cli docs


Angular 9 - ดูเหมือนว่าจะถูกลบออกไปแล้ว
rmcsharry

ไม่ยังมีอยู่ใน NG 9
tephyr

6

คุณสามารถไปที่src/test.tsและสามารถเปลี่ยนบรรทัดต่อไปนี้:

const context = require.context('./', true, /\.spec\.ts$/);

ถึง

const context = require.context('./', true, /**yourcomponent.component**\.spec\.ts$/);

ป้อนคำอธิบายภาพที่นี่


1
พูดอย่างเคร่งครัดดูเหมือนว่าคำตอบที่ถูกต้องที่สุดแม้ว่าคำถามส่วนใหญ่เกี่ยวกับวิธีการนี้จะมีการแก้ไขปัญหาโดยใช้ fit และ fdescribe มีปัญหาที่คอมไพล์เพื่อให้บรรลุนี้ได้อย่างง่ายดายมากขึ้นในการเป็นพลังน้ำใจ: github.com/karma-runner/karma/issues/1507 ตามหลักการแล้วเราสามารถกำหนดค่า Karma เพื่อให้เราทำการเปลี่ยนแปลงกับการทดสอบหนึ่งครั้งจากนั้นคลิกบนเบราว์เซอร์เพื่อเรียกใช้การอัปเดตอีกครั้ง
pumpkinthehead

3

Visual Studio Code Extension

วิธีที่ง่ายที่สุดคือใช้ส่วนขยายvscode-test-explorerร่วมกับangular -arma-test-explorerและjasmine-test-adapterซึ่งเป็นเด็กคุณจะได้รับรายการการทดสอบปัจจุบันเพื่อรันทีละรายการหากคุณต้องการ: ป้อนคำอธิบายภาพที่นี่

นี่เป็นคำตอบเดียวกับที่ฉันให้ไว้สำหรับคำถามนี้มีรายละเอียดเพิ่มเติมอยู่ที่นั่น



0

คุณต้องไปsrc/test.tsและสามารถเปลี่ยนรหัสหมายเลขบรรทัดต่อไปนี้ 18:

//Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);

ถึง

//Then we find all the tests.
const context = require.context('./', true, /testing.component\.spec\.ts$/);

ป้อนคำอธิบายภาพที่นี่


-3

ใช้งานได้ถ้าคุณระบุไฟล์ข้อมูลจำเพาะของคุณเป็นพารามิเตอร์

ตัวอย่างเช่น:

ng ทดสอบ foo.spec.ts

หวังว่านี่จะช่วยได้


4
คุณระบุได้ไหมว่าคุณกำลังใช้เวอร์ชันใด ไม่ทำงานกับ 1.7.x
FrEaKmA ใน

4
มันไม่ได้ผลสำหรับฉันเช่นกัน แต่ฉันแก้ไขให้ทำงานกับ - ตัวเลือกหลักก่อนพา ธ ไปยังไฟล์ข้อมูลจำเพาะ ฉันใช้เส้นทางที่แน่นอนโดยใช้เครื่องหมายทับ ยังไม่ได้ลองเส้นทางสัมพัทธ์ การใช้ Angular 6 ไม่แน่ใจว่าเป็นวิธีแก้ปัญหาที่ดีที่สุดหรือไม่ แต่ดูเหมือนว่าจะใช้ได้กับฉัน
user2367418
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.