ฉันใช้ 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-onlyCI / บิลด์เซิร์ฟเวอร์ .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กรองจาก@แท็กเท่านั้น