ฉันใช้ Mocha เพื่อทดสอบ JavaScript ของฉัน ไฟล์ทดสอบของฉันมี 5 การทดสอบ เป็นไปได้หรือไม่ที่จะรันการทดสอบเฉพาะ (หรือชุดการทดสอบ) แทนการทดสอบทั้งหมดในไฟล์?
ฉันใช้ Mocha เพื่อทดสอบ JavaScript ของฉัน ไฟล์ทดสอบของฉันมี 5 การทดสอบ เป็นไปได้หรือไม่ที่จะรันการทดสอบเฉพาะ (หรือชุดการทดสอบ) แทนการทดสอบทั้งหมดในไฟล์?
คำตอบ:
ลองใช้ตัวเลือกของมอคค่า--grep
:
-g, --grep <pattern> only run tests matching <pattern>
คุณสามารถใช้ regex JavaScript ใด ๆ <pattern>
ที่ถูกต้องเป็น ตัวอย่างเช่นถ้าเรามีtest/mytest.js
:
it('logs a', function(done) {
console.log('a');
done();
});
it('logs b', function(done) {
console.log('b');
done();
});
แล้ว:
$ mocha -g 'logs a'
เพื่อรันการทดสอบเดียว โปรดทราบว่าสิ่งนี้ greps ในชื่อของทั้งหมดdescribe(name, fn)
และit(name, fn)
การร้องขอ
พิจารณาใช้การdescribe()
โทรที่ซ้อนกันสำหรับการกำหนดเนมสเปซเพื่อให้ง่ายต่อการค้นหาและเลือกชุดเฉพาะ
mocha some/test.js
) ไม่ทำงานเลย ขอบคุณ!
logs a bcd
ซึ่งประกอบด้วยlogs a
ซับสตริงหรือไม่ Regexp ^$
ไม่ทำงานใน 0.10.2
ทั้งนี้ขึ้นอยู่กับรูปแบบการใช้งานของคุณคุณอาจเพียงแค่ต้องการใช้เท่านั้น เราใช้สไตล์ TDD; ดูเหมือนว่านี้:
test.only('Date part of valid Partition Key', function (done) {
//...
}
เฉพาะการทดสอบนี้เท่านั้นที่จะเรียกใช้จากไฟล์ / ชุดโปรแกรมทั้งหมด
it.only
กับชัยและคาดว่าไวยากรณ์ที่จะเป็น
eslint-plugin-mocha
มีกฎที่จะจับคุณถ้าคุณลืมลบno-exclusive-tests
.only
หากคุณกำลังใช้npm test
(ใช้สคริปต์ package.json) ใช้ส่วนพิเศษ--
เพื่อส่งพารามิเตอร์ผ่านไปยังมอคค่า
เช่น npm test -- --grep "my second test"
แก้ไข : ดูเหมือน--grep
จะยุ่งเล็กน้อย (อาจขึ้นอยู่กับข้อโต้แย้งอื่น ๆ ) คุณสามารถ:
แก้ไข package.json:
"test:mocha": "mocha --grep \"<DealsList />\" .",
หรือใช้อีกทางเลือกหนึ่ง--bail
ซึ่งดูเหมือนว่าจะจุกจิกน้อยลง
npm test -- --bail
--grep
สามารถจุกจิกเล็กน้อย - ลองวางไว้หลังมอคค่าในรายการสคริปต์ npm อื่นnpm test -- --bail
มีประโยชน์สำหรับการประกันตัวหลังจากการทดสอบครั้งแรกล้มเหลว
--grep
บันทึกวันของฉัน! ขอบคุณมาก. PS ฉันใช้ Windows ทำงานอยู่npm test -- --grep @tag
ที่จริงแล้วหนึ่งสามารถรันการทดสอบมอคค่าเดียวโดยใช้ชื่อไฟล์ (ไม่ใช่แค่„ it () - string-grepping“) หากคุณลบรูปแบบ glob (เช่น./test/**/*.spec.js
) ออกจาก mocha.opts ของคุณตามลำดับสร้างสำเนาโดยไม่มี:
node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js
นี่คือ mocha.single.opts ของฉัน (มันแตกต่างกันเฉพาะในการหายไปของสาย glob ดังกล่าว)
--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive
พื้นหลัง:ในขณะที่คุณสามารถแทนที่สวิทช์ต่างๆจาก opts ไฟล์ (เริ่มต้นด้วย--
) คุณไม่สามารถแทนที่ glob ลิงค์นั้นยังมีคำอธิบายบางอย่าง
คำแนะนำ:หากnode_modules/.bin/mocha
คุณสับสนให้ใช้มอคค่าแพ็คเกจในท้องที่ คุณสามารถเขียนได้mocha
ถ้าคุณติดตั้งไว้ทั่วโลก
และถ้าคุณต้องการความสะดวกสบายของpackage.json
: ยัง: ลบ**/*
-ish glob จากคุณmocha.opts
ใส่พวกเขาที่นี่สำหรับการทดสอบทั้งหมดปล่อยพวกเขาออกไปสำหรับการทดสอบเดียว:
"test": "mocha ./test/**/*.spec.js",
"test-watch": "mocha -R list -w ./test/**/*.spec.js",
"test-single": "mocha $1",
"test-single-watch": "mocha -R list -w $1",
การใช้งาน:
> npm run test
ตามลำดับ
> npm run test-single -- test/ES6.self-test.spec.js
(ใจ--
!)
Warning: Could not find any test files matching pattern: $1
เพียงใช้. ก่อนที่จะ 'อธิบาย', 'มัน' หรือ 'บริบท' ฉันรันโดยใช้ "$ npm run test: unit" และรันเฉพาะหน่วยด้วย. only
describe.only('get success', function() {
// ...
});
it.only('should return 1', function() {
// ...
});
การแก้ปัญหาข้างต้นไม่ได้ผลสำหรับฉัน อีกวิธีหนึ่งในการรันการทดสอบเดียวคือ
mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'
สิ่งนี้ช่วยในการรันกรณีทดสอบจากไฟล์เดียวและมีชื่อเฉพาะ
-g
และคุณไม่จำเป็นต้องระบุชื่อไฟล์ หากคุณไม่สามารถเขียนนิพจน์ที่เลือกได้เพียงพอนั่นหมายความว่าคุณไม่ได้ตั้งชื่อการทดสอบอย่างเหมาะสม
npm test <filepath>
เช่น :
npm test test/api/controllers/test.js
ที่นี่ 'test / api / controllers / test.js' คือ filepath
คุณสามารถลอง "เท่านั้น"
it.only('Test one ', () => {
expect(x).to.equal(y);
});
it('Test two ', () => {
expect(x).to.equal(y);
});
ในนี้คนแรกเท่านั้นที่จะดำเนินการ
--forbid-only
CI / บิลด์เซิร์ฟเวอร์ .only
มีแนวโน้มที่จะแอบเข้าไปในสาขาหลักและทำให้การทดสอบอื่น ๆ ไม่ทำงานเนื่องจากพวกเขาจะไม่ทำงานอีกต่อไป ฉันคิดว่าเวิร์กโฟลว์ของการเปลี่ยนรหัสเพื่อเรียกใช้การทดสอบที่แตกต่างกันต่อต้านคุณสมบัติ ผู้ทดสอบควรกำหนดว่าการทดสอบใดที่ควรดำเนินการ (หรือที่รู้จักว่าการทดสอบที่ติดแท็ก) ไม่ใช่นักพัฒนา
it.only
เพื่อซื้อคืน
มองไปที่https://mochajs.org/#usage เราเห็นว่าใช้
มอคค่าทดสอบ / myfile
จะทำงาน. คุณสามารถละเว้น '.js' ได้ในตอนท้าย
ไม่แน่ใจว่าทำไมวิธี grep ไม่ทำงานสำหรับฉันเมื่อใช้การทดสอบ npm งานนี้แม้ว่า ฉันยังต้องระบุโฟลเดอร์ทดสอบด้วยเหตุผลบางอย่าง
ทดสอบ npm - ทดสอบ / sometest.js
รวมการทดสอบทั้งหมดของคุณไว้ในไฟล์ test.js หนึ่งไฟล์และแพ็คเกจ json ของคุณเพิ่มสคริปต์เป็น:
"scripts": {
"api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},
พิมพ์คำสั่งในไดเรกทอรีทดสอบของคุณ:
npm run api:test
--grep
กรองจาก@
แท็กเท่านั้น