กรรม: เรียกใช้ไฟล์ทดสอบไฟล์เดียวจากบรรทัดคำสั่ง


95

ดังนั้นฉันได้ค้นหาสิ่งนี้จนหมดแล้วพบคำตอบที่ "คล้ายกัน" ที่นี่ แต่ไม่ใช่สิ่งที่ฉันต้องการ

ตอนนี้ถ้าผมต้องการที่จะทดสอบไฟล์เดียวกับกรรมที่ฉันต้องทำfit(), fdescribe()ไฟล์ในคำถาม ...

อย่างไรก็ตามสิ่งที่ฉันต้องการคือสามารถเรียกใช้กรรมด้วยไฟล์ config และนำไปยังไฟล์เฉพาะดังนั้นฉันไม่จำเป็นต้องแก้ไขไฟล์เลยเช่น:

karma run --conf karma.conf.js --file /path/to/specific/test_file.js

เป็นไปได้ไหมที่จะทำเช่นนี้ หรือกับผู้ช่วยคนใด? (ใช้คำรามหรืออึก?)


1
พยายามkarma run -- --grep=testDescriptionFilter? ฉันเคยเห็นสิ่งนี้แนะนำมาก่อน แต่ฉันไม่สามารถยืนยันได้โดยตรงว่าใช้ได้หรือไม่ (ถ้าฉันอยู่บ้านฉันจะลองก่อนที่จะแนะนำเนื่องจากฉันไม่สามารถลองได้ฉันจึงแสดงความคิดเห็นแทนการตอบ) :)
bvaughn

1
ไม่ได้มีไว้เพื่อเฉพาะเจาะจงitหรือไม่? ไม่มีความเป็นไปได้ที่จะใช้สำหรับไฟล์?
Gonçalo Vieira

3
บอกตามตรงว่าฉันเพิ่งปรับเปลี่ยนarma.confอยู่เสมอถ้าฉันต้องการเน้นที่ไฟล์ทดสอบเดียว มันง่ายพอที่จะทำโดยที่ฉันไม่เคยใช้ความพยายามเพื่อค้นหาวิธีที่เร็วกว่านี้
bvaughn

1
ฮอทดอก. ดีใจที่ช่วยได้ โพสต์ :)
bvaughn

1
คำถามที่เกี่ยวข้อง: stackoverflow.com/questions/26552729/karma-run-single-test/…
Stefan

คำตอบ:


60

ก่อนอื่นคุณต้องเริ่มเซิร์ฟเวอร์กรรมด้วย

karma start

จากนั้นคุณสามารถใช้ grep เพื่อกรองการทดสอบเฉพาะหรืออธิบายบล็อก:

karma run -- --grep=testDescriptionFilter

12
คำตอบนี้ควรบอกว่าคุณควรkarmaวิ่งด้วยkarma startก่อนวิ่งkarma run
etagwerker

4
karma runฉันไม่คิดว่านั่นเป็นสิ่งที่จำเป็นที่ได้รับว่าคำถามที่ถามเกี่ยวกับวิธีการกรองด้วย เห็นได้ชัดว่าผู้โพสต์รู้วิธีเริ่ม Karma และเรียกใช้การทดสอบทั้งหมดและเพียงแค่มองหาไวยากรณ์เกี่ยวกับการกรอง
bvaughn

2
ฉันจะทำอย่างไรหากต้องการให้สิ่งนี้เกิดขึ้นโดยใช้โปรแกรม คือฉันไม่รู้คำอธิบายของไฟล์ที่เปลี่ยนไป แต่ฉันจะรู้ชื่อไฟล์
MPV

3
วิธีนี้ดูเหมือนจะไม่ได้ผลเลยกับการทดสอบจัสมิน (กรรม - จัสมิน) และการเรียกใช้กรรม - help ไม่แสดง --grep เป็นตัวเลือกคำสั่งเลย ฉันใช้ Karma ล่าสุด (มันบอกว่า 1.5.0)
Yavin5

11
ไม่ได้ทำการทดสอบเพียงครั้งเดียว!
eav

17

แม้ว่า--filesจะไม่ได้รับการสนับสนุนอีกต่อไป แต่คุณสามารถใช้ตัวแปร env เพื่อจัดเตรียมรายการไฟล์:

// karma.conf.js
function getSpecs(specList) {
  if (specList) {
    return specList.split(',')
  } else {
    return ['**/*_spec.js'] // whatever your default glob is
  }
}

module.exports = function(config) {
  config.set({
    //...
    files: ['app.js'].concat(getSpecs(process.env.KARMA_SPECS))
  });
});

จากนั้นใน CLI:

$ env KARMA_SPECS="spec1.js,spec2.js" karma start karma.conf.js --single-run

1
จบลงด้วยการทำงานที่ยอดเยี่ยม! ตรวจสอบให้แน่ใจว่า glob เริ่มต้นของคุณมีชื่อไดเร็กทอรีอยู่ด้านหน้ามิฉะนั้นคุณจะได้รับข้อผิดพลาดของรูปแบบ นอกจากนี้ฉันยังเปลี่ยนไฟล์ของฉัน: คำจำกัดความเช่นนี้: files: [] .concat (getSpecs (process.env.KARMA_SPECS)) และนั่นก็ทำงานได้ดีขึ้นเนื่องจากฟังก์ชั่นวางรูปแบบ glob ไว้แล้วหากไม่มีตัวแปรสภาพแวดล้อม ชุด. โอ้ฉันไม่คิดว่าคุณต้องการ "env" ที่ด้านหน้าของคำสั่ง (ใช้ได้กับฉันถ้าไม่มีสิ่งนั้น) ขอบคุณสำหรับการแก้ปัญหานี้ @Yuriy Kharchenko!
Yavin5

6

ตัวเลือกนี้ไม่รองรับกรรมเวอร์ชันล่าสุดอีกต่อไป:

ดูhttps://github.com/karma-runner/karma/issues/1731#issuecomment-174227054

อาร์เรย์ไฟล์สามารถกำหนดใหม่ได้โดยใช้ CLI ดังนี้:

karma start --files=Array("test/Spec/services/myServiceSpec.js")

หรือหนี:

karma start --files=Array\(\"test/Spec/services/myServiceSpec.js\"\)

อ้างอิง


2
ให้ข้อผิดพลาดนี้แก่ฉัน - bash: ข้อผิดพลาดทางไวยากรณ์ใกล้กับโทเค็นที่ไม่คาดคิด `('
Lakshay

5
ดังนั้นเมื่อฉันลองสิ่งนี้ฉันได้รับข้อผิดพลาดดังต่อไปนี้config.files = config.files.map(createPatternObject).map(createPatternMapper(basePathResolve))ซึ่งอาจเกิดจากการที่ฉันใช้ requireJS?
Gonçalo Vieira

1
เอ่อไม่ใช่เพราะ requireJS ด้วยเหตุผลแปลก ๆ ที่กรรมไม่อ่าน Array ("zzz") ว่าเป็น JS Array? O_o
Gonçalo Vieira

2
nm ดูเหมือนว่ากรรมจะไม่สนับสนุน a --files arg อีกต่อไป?
Gonçalo Vieira

23
คำเตือนสำหรับทุกคนที่มาที่นี่ตัวเลือกนี้จะไม่ได้รับการสนับสนุนในกรรม: github.com/karma-runner/karma/issues/...
dignifiedquire
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.