จะระบุไดเรกทอรีทดสอบสำหรับมอคค่าได้อย่างไร


219

มอคค่าพยายามค้นหาไฟล์ทดสอบตามtestค่าเริ่มต้นฉันจะระบุ dir อื่นได้server-testอย่างไร?


แม้ว่าจะไม่ใช่คำตอบสำหรับคำถามของคุณ 100% ลองดูjaketrent.com/post/run-single-mocha-test - ฉันมาที่นี่เพื่อค้นหาวิธีการใช้ชุดทดสอบที่เฉพาะเจาะจงและสิ่งนี้แสดงให้เห็นว่าคุณสามารถใช้.onlyและ.skipจัดการการทดสอบใดที่คุณ กำลังทำงานอยู่ สำคัญในระหว่างการพัฒนาคุณสมบัติเฉพาะเมื่อคุณไม่ต้องการรอให้ชุดทดสอบทั้งหมดทำงานตลอดเวลา
Dave Sag

คำตอบ:


141

แก้ไข: ตัวเลือกนี้เลิกใช้แล้ว: https://mochajs.org/#mochaopts


หากคุณต้องการที่จะทำโดยเพียงแค่ยังรันmochaบนบรรทัดคำสั่ง แต่ต้องการรันการทดสอบในโฟลเดอร์./server-testsแทน./testให้สร้างไฟล์ที่./test/mocha.optsมีเพียงแค่นี้ในไฟล์:

server-tests

หากคุณต้องการเรียกใช้ทุกสิ่งในโฟลเดอร์และไดเรกทอรีย่อยให้ใส่สิ่งนี้ลงใน test/mocha.opts

server-tests
--recursive

mocha.opts เป็นข้อโต้แย้งที่ส่งผ่านทางบรรทัดคำสั่งดังนั้นการสร้างบรรทัดแรกเพียงไดเรกทอรีที่คุณต้องการเปลี่ยนการทดสอบก็จะเปลี่ยนเส้นทางจาก ./test/


12
นี่คือตัวเลือกที่มีความเสียดทานน้อยที่สุดและควรเป็นคำตอบที่ยอมรับได้
Nick Tomlin

ฉันใช้หนึ่งในจานหม้อไอน้ำและมันที่บรรทัดต่อไปนี้อาจเป็นเพราะหน้าต่างคุณสามารถโปรดตรวจสอบครั้งเดียวโหนด. / โหนด _modules/mocha/bin/mocha $ (ค้นหา api -name '* -test.js') - ผู้คอมไพล์ js: babel-core / register
kobe

1
อัญมณี, ยังเล่นได้ดีกับ Webstorm IDE mocha debug configuration เพียงเลือก "รูปแบบไฟล์" และปล่อยให้อินพุตว่างและมันจะใช้ mocha.opts
danday74

3
นั่นคือคำตอบที่ดีที่สุดแน่นอน อาจเป็นไปได้ที่จะเพิ่มคำตอบของคุณรวมถึงmocha.optsไฟล์ที่สามารถวางได้ทุกที่ที่คุณต้องการจากนั้นก็ดำเนินการmochaระบุพา ธ ไปยังไฟล์กำหนดค่าผ่านตัวอย่างเช่น:mocha --opts ./mocha.opts
quirimmo

1
คุณอาจเพียงแค่ - เรียกใช้ในบรรทัดคำสั่ง
mocha

282

ใช้สิ่งนี้:

mocha server-test

หรือถ้าคุณมีไดเรกทอรีย่อยให้ใช้สิ่งนี้:

mocha "server-test/**/*.js"

หมายเหตุการใช้เครื่องหมายคำพูดคู่ หากคุณเว้นไว้คุณอาจไม่สามารถทำการทดสอบในไดเรกทอรีย่อยได้


1
มันไม่ได้ผลสำหรับฉัน หากฉันต้องการทำเช่นนี้ฉันต้องทำmocha test/server-test
jonnie

22
ปัญหาราคาคู่มีฉันสำหรับทุกวัย! ขอขอบคุณที่ช่วยรักษาสติของฉัน ตะโกนออกมาให้ทุกคนที่อ่านสิ่งนี้เพื่อเอาใจใส่เป็นพิเศษกับคำพูดคู่นั้น
ctrlplusb

11
ในกรณีของฉันฉันใช้mocha ./**/*.test.js(ดังนั้นฉันสามารถ colocate ไฟล์ทดสอบด้วยไฟล์โมดูล) รูปแบบหยุดทำงานสำหรับฉันเมื่อฉันเพิ่มไฟล์ทดสอบในระดับที่แตกต่างกันในลำดับชั้นของไฟล์มากกว่าการทดสอบที่เหลือและจะพบว่าไฟล์บอลคี่หนึ่งไฟล์และไม่ใช่โหลอื่น ๆ ที่อยู่ในระดับเดียวกันในลำดับชั้น . การห่อคำพูดคงที่
Stoutie

1
หรือใช้--recursiveตามที่ฉันอธิบายด้านล่าง
Jeff Dickey

4
นี่ควรเป็นคำตอบ! คำพูดสองเท่าช่วยฉันด้วย
มินห์ไทย

81

นี่เป็นวิธีหนึ่งถ้าคุณมีโฟลเดอร์ย่อยในโฟลเดอร์ทดสอบของคุณเช่น

/test
/test/server-test
/test/other-test

จากนั้นใน linux คุณสามารถใช้คำสั่ง find เพื่อแสดงรายการไฟล์ * .js ทั้งหมดซ้ำและส่งต่อไปยัง mocha:

mocha $(find test -name '*.js')

29
หรือใช้--recursiveตามที่ฉันอธิบายด้านล่าง
Jeff Dickey

5
ดังนั้นจึงmochaไม่มีตัวเลือกในการกำหนดโครงสร้างไดเรกทอรีที่ต้องการในการกำหนดค่า?
Green

ผู้ใช้ไคลเอ็นต์ $ mocha $ (ค้นหาการทดสอบ - ชื่อ '* .js') -bash: mocha: ไม่พบคำสั่ง; รับข้อผิดพลาดนี้
lft93ryt

1
นี่ซับซ้อนเกินไปและทำให้เข้าใจผิด ต้องการตัวเลือกมอคค่าแทนการใช้คำสั่ง OS
Michael Bushe

โพสต์ของคุณไม่ตอบคำถาม
ekkis

30

วิธีที่ดีในการทำเช่นนี้คือการเพิ่มสคริปต์ "ทดสอบ" npm ใน package.json ที่เรียกมอคค่าด้วยอาร์กิวเมนต์ที่ถูกต้อง วิธีนี้ package.json ของคุณยังอธิบายถึงโครงสร้างการทดสอบของคุณ นอกจากนี้ยังหลีกเลี่ยงปัญหาข้ามแพลตฟอร์มเหล่านี้ในคำตอบอื่น ๆ (คำพูดคู่เปรียบเทียบกับคำพูดเดี่ยว "ค้นหา" ฯลฯ )

หากต้องการให้มอคค่าเรียกใช้ไฟล์ js ทั้งหมดในไดเรกทอรี "test":

"scripts": {
    "start": "node ./bin/www", -- not required for tests, just here for context
    "test": "mocha test/**/*.js"
  },

จากนั้นให้เรียกใช้การทดสอบควันเท่านั้น:

npm test

คุณสามารถสร้างมาตรฐานการทำงานของการทดสอบทั้งหมดในทุกโครงการด้วยวิธีนี้ดังนั้นเมื่อนักพัฒนาใหม่เริ่มโครงการของคุณหรือพวกเขารู้ว่า "การทดสอบ npm" จะทำการทดสอบ มีความสำคัญทางประวัติศาสตร์ที่ดีสำหรับเรื่องนี้ (Maven เช่นโรงเรียนเก่า ๆ ส่วนใหญ่ที่ "ทำ" โครงการด้วย) มันช่วยให้แน่ใจว่า CI เมื่อทุกโครงการมีคำสั่งทดสอบเดียวกัน

ในทำนองเดียวกันคุณอาจมีชุดย่อยของการทดสอบ "ควัน" ที่เร็วขึ้นซึ่งคุณอาจต้องการให้มอคค่าทำงาน:

"scripts": {
    "test": "mocha test/**/*.js"
    "smoketest": "mocha smoketest/**/*.js"
  },

จากนั้นให้เรียกใช้การทดสอบควันเท่านั้น:

npm smoketest

อีกรูปแบบทั่วไปคือการวางการทดสอบของคุณในไดเรกทอรีเดียวกันกับแหล่งที่มาที่พวกเขาทดสอบ แต่เรียกทดสอบไฟล์ * .spec.js ตัวอย่างเช่น: src / foo / foo.js ทดสอบโดย src / foo / foo.spec.js

ในการรันการทดสอบทั้งหมดที่มีชื่อว่า * .spec.js ตามแบบแผน:

  "scripts": {
    "test": "mocha **/*.spec.js"
  },

จากนั้นให้เรียกใช้การทดสอบทั้งหมด:

npm test

ดูรูปแบบที่นี่? ดี. :) สอดคล้องเอาชนะmura


นี่เป็นวิธีที่แม่นยำที่สุดในการทำสิ่งนี้ฉันเดา
ArturS

29

อย่าใช้ตัวเลือก -g หรือ --grep รูปแบบนั้นทำงานกับชื่อของการทดสอบด้านใน () ไม่ใช่ระบบไฟล์ เอกสารปัจจุบันทำให้เข้าใจผิดและ / หรือผิดเกี่ยวกับเรื่องนี้ หากต้องการ จำกัด คำสั่งทั้งหมดให้เป็นส่วนหนึ่งของระบบไฟล์คุณสามารถส่งรูปแบบเป็นอาร์กิวเมนต์สุดท้าย (ไม่ใช่แฟล็ก)

ตัวอย่างเช่นคำสั่งนี้จะตั้งค่านักข่าวของคุณเพื่อสเป็ค แต่จะทดสอบไฟล์ js ทันทีภายในไดเรกทอรีทดสอบเซิร์ฟเวอร์:

mocha --reporter spec server-test/*.js

คำสั่งนี้จะทำเช่นเดียวกันกับข้างบนมันจะทำการทดสอบเคสที่สตริง (/) ของการทดสอบเริ่มต้นด้วย "Fnord:":

mocha --reporter spec --grep "Fnord:" server-test/*.js

22

หากอยู่ในnode.jsการกำหนดค่าใหม่บางอย่างของMocha v6 :

ตัวเลือก 1: สร้าง.mocharc.jsonในไดเรกทอรีรากของโครงการ:

{
  "spec": "path/to/test/files"
}

ตัวเลือก 2: เพิ่มmochaคุณสมบัติในโครงการpackage.json:

{
  ...

  "mocha": {
    "spec": "path/to/test/files"
  }
}

ตัวเลือกเพิ่มเติมที่นี่


20

รันไฟล์ทั้งหมดในการtest_directoryรวมไดเร็กทอรีย่อยที่ตรงกันtest.js

find ./parent_test_directory -name '*test.js' | xargs mocha -R spec

หรือใช้--recursiveสวิตช์

mocha --recursive test_directory/

11

ฉันมีปัญหานี้ในตอนนี้และแก้ไขมันโดยการลบ--recursiveตัวเลือก (ซึ่งฉันตั้งไว้) และใช้โครงสร้างเดียวกันที่แนะนำข้างต้น:

mochify "test/unit/**/*.js"

นี่เป็นการทดสอบทั้งหมดในไดเรกทอรีทั้งหมดภายใต้/test/unit/สำหรับฉันในขณะที่ละเว้นไดเรกทอรีอื่น ๆ ภายใน/test/


9

ต่อไปนี้เป็นวัน (ปี 2020)คุณสามารถจัดการได้โดยใช้ไฟล์การกำหนดค่า mocha :

ขั้นตอนที่ 1: สร้างไฟล์. mocarc.jsที่ตำแหน่งรูทของแอปพลิเคชันของคุณ

ขั้นตอนที่ 2: เพิ่มโค้ดด้านล่างในไฟล์มอคค่า:

'use strict';

module.exports = {
  spec: 'src/app/**/*.test.js'
};

สำหรับตัวเลือกเพิ่มเติมในไฟล์กำหนดค่าให้อ้างอิงลิงก์นี้: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js


3

ฉันใช้ Windows 7 โดยใช้ node.js v0.10.0 และ mocha v1.8.2 และ npm v1.2.14 ฉันแค่พยายามดึงมอคค่าให้ใช้การทดสอบพา ธ / หน่วยเพื่อค้นหาการทดสอบของฉันหลังจากใช้เวลานานและลองหลาย ๆ สิ่งที่ฉันได้รับ

การใช้ตัวเลือก "test / unit / *. js" ไม่ทำงานบน windows ด้วยเหตุผลที่ดีว่า windows shell ไม่ได้ขยาย wildcard เช่น unixen

อย่างไรก็ตามการใช้ "test / unit" ใช้งานได้โดยไม่มีรูปแบบไฟล์ เช่น. "mocha test / unit" เรียกใช้ไฟล์ทั้งหมดที่พบในโฟลเดอร์ test / unit

สิ่งนี้ยังคงเรียกใช้ไฟล์โฟลเดอร์เดียวเป็นการทดสอบ แต่คุณสามารถส่งชื่อไดเรกทอรีหลาย ๆ ชื่อเป็นพารามิเตอร์

นอกจากนี้ในการเรียกใช้ไฟล์ทดสอบเดียวคุณสามารถระบุพา ธ เต็มและชื่อไฟล์ เช่น. "มอคค่าทดสอบ / หน่วย / mytest1.js"

จริง ๆ แล้วฉันติดตั้งใน package.json สำหรับ "สคริปต์" npm ": {" test ":" mocha test / unit "},

ดังนั้น 'การทดสอบ npm' จะทำการทดสอบหน่วยของฉัน


11
ณ วันนี้เราสามารถใช้--recursiveตัวเลือกดังต่อไปนี้:mocha --recursive "some_dir"
superjos

3
การใช้node_modules\.bin\mocha "test\unit\*.js"งานบน Windows ยังใช้node_modules\.bin\mocha "**\*.js"งานได้ (กรณีจริงของฉัน) แต่ฉันกำลังมองหาวิธีที่จะแยกไดเรกทอรีnode_modules (ฉันใช้ gulpfile.js ด้วย แต่บางครั้งฉันต้องเปิดการทดสอบโดยตรงกับมอคค่า)
อเล็กซ์ 75

3

หากคุณกำลังใช้nodejsในpackage.jsonภายใต้ของคุณscripts

  1. สำหรับglobal (-g)การติดตั้ง: "test": "mocha server-test"หรือ"test": "mocha server-test/**/*.js"สำหรับเอกสารย่อย
  2. สำหรับprojectการติดตั้ง: "test": "node_modules/mocha/bin/mocha server-test"หรือ"test": "node_modules/mocha/bin/mocha server-test/**/*.js"สำหรับเอกสารย่อย

จากนั้นให้ทำการทดสอบตามปกติ npm test


ฉันพบว่าnpm run mocha "./test/*.spec.js!(~)"ไม่สนใจอาร์กิวเมนต์ glob แต่node_modules/.bin/mocha "./test/*.spec.js!(~)"ไม่พบ
ironchicken

@ironchicken เพื่อส่งผ่านข้อโต้แย้งไปยังจาก "การใช้งาน npm" - เหมือนในnpm run mocha -- yourArgs
Pedro A

3

ตามที่ระบุไว้โดย @superjos ในการใช้ความคิดเห็น

mocha --recursive "some_dir"


2

ดูเหมือนจะไม่เป็นการสนับสนุน "ง่าย" สำหรับการเปลี่ยนไดเรกทอรีทดสอบ
อย่างไรก็ตามบางทีคุณควรดูที่ปัญหานี้เทียบกับคำถามของคุณ


2

ในฐานะที่เป็น @ testเจฟฟ์-ผ้ากันเปื้อนแนะนำในรากของโครงการของคุณให้โฟลเดอร์ที่เรียกว่า ในโฟลเดอร์นั้นให้สร้างไฟล์ชื่อmocha.optsในโฟลเดอร์ที่ทำให้ไฟล์ที่เรียกว่าตอนนี้ที่ฉันพยายามปรับปรุงคำตอบของเจฟฟ์สิ่งที่ใช้ได้ผลสำหรับฉันคือแทนที่จะระบุชื่อโฟลเดอร์ทดสอบเพียงโฟลเดอร์เดียวฉันระบุรูปแบบเพื่อค้นหาการทดสอบทั้งหมดเพื่อให้ทำงานในโครงการของฉันโดยเพิ่มบรรทัดนี้:

*/tests/*.js --recursive ใน mocha.opts

หากคุณต้องการระบุโฟลเดอร์ที่แน่นอนเพื่อค้นหาการทดสอบฉันได้ทำสิ่งนี้:

shared/tests/*.js --recursive
server/tests/graph/*.js --recursive

ฉันหวังว่านี่จะช่วยให้ทุกคนที่ต้องการมากกว่าคำตอบอื่น ๆ

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