Câu trả lời:
Chỉnh sửa: Tùy chọn này không được chấp nhận: https://mochajs.org/#mochaopts
Nếu bạn muốn làm điều đó bằng cách vẫn chỉ chạy mocha
trên dòng lệnh, nhưng muốn chạy thử nghiệm trong một thư mục ./server-tests
thay vì ./test
, hãy tạo một tệp ./test/mocha.opts
chỉ với điều này trong tệp:
server-tests
Nếu bạn muốn chạy mọi thứ trong thư mục và thư mục con đó, hãy đặt nó vào test/mocha.opts
server-tests
--recursive
mocha.opts
là các đối số được truyền qua dòng lệnh, do đó, việc tạo dòng đầu tiên chỉ là thư mục bạn muốn thay đổi các bài kiểm tra cũng sẽ chuyển hướng từ ./test/
mocha.opts
tập tin có thể được đặt bất cứ nơi nào bạn muốn, và sau đó chỉ cần thực hiện mocha
xác định đường dẫn đến tập tin cấu hình của mình thông qua ví dụ:mocha --opts ./mocha.opts
Dùng cái này:
mocha server-test
Hoặc nếu bạn có thư mục con, hãy sử dụng:
mocha "server-test/**/*.js"
Lưu ý việc sử dụng dấu ngoặc kép. Nếu bạn bỏ qua chúng, bạn có thể không chạy được các bài kiểm tra trong thư mục con.
mocha test/server-test
mocha ./**/*.test.js
(vì vậy tôi có thể định vị tệp thử nghiệm với tệp mô-đun). Mẫu ngừng hoạt động đối với tôi khi tôi thêm một tệp thử nghiệm ở một cấp độ khác trong hệ thống phân cấp tệp so với các thử nghiệm còn lại và sẽ chỉ tìm thấy một tệp bóng lẻ chứ không phải hàng tá tệp khác sống cùng cấp trong phân cấp . Gói trong dấu ngoặc kép cố định nó.
--recursive
như tôi giải thích bên dưới
Đây là một cách, nếu bạn có thư mục con trong thư mục thử nghiệm của mình, vd
/test
/test/server-test
/test/other-test
Sau đó, trong linux, bạn có thể sử dụng lệnh find để liệt kê tất cả các tệp * .js theo cách đệ quy và chuyển nó đến mocha:
mocha $(find test -name '*.js')
--recursive
như tôi giải thích bên dưới
mocha
không có tùy chọn để thiết lập cấu trúc thư mục mong muốn trong cấu hình?
Cách hay để làm điều này là thêm một tập lệnh npm "thử nghiệm" trong gói.json gọi mocha với các đối số phù hợp. Bằng cách này, pack.json cũng mô tả cấu trúc thử nghiệm của bạn. Nó cũng tránh tất cả các vấn đề đa nền tảng này trong các câu trả lời khác (gấp đôi so với trích dẫn đơn, "tìm", v.v.)
Để có mocha chạy tất cả các tệp js trong thư mục "test":
"scripts": {
"start": "node ./bin/www", -- not required for tests, just here for context
"test": "mocha test/**/*.js"
},
Sau đó, để chỉ chạy thử nghiệm cuộc gọi khói:
npm test
Bạn có thể tiêu chuẩn hóa việc chạy tất cả các thử nghiệm trong tất cả các dự án theo cách này, vì vậy khi nhà phát triển mới bắt đầu dự án của bạn hoặc dự án khác, họ biết "npm test" sẽ chạy thử nghiệm. Có một ưu tiên lịch sử tốt cho việc này (ví dụ, Maven, hầu hết các dự án "làm" trường học cũ). Nó chắc chắn giúp CI khi tất cả các dự án có cùng một lệnh kiểm tra.
Tương tự, bạn có thể có một tập hợp các bài kiểm tra "khói" nhanh hơn mà bạn có thể muốn mocha chạy:
"scripts": {
"test": "mocha test/**/*.js"
"smoketest": "mocha smoketest/**/*.js"
},
Sau đó, để chỉ chạy thử nghiệm cuộc gọi khói:
npm smoketest
Một mẫu phổ biến khác là đặt các bài kiểm tra của bạn trong cùng thư mục với nguồn mà chúng kiểm tra, nhưng gọi các tệp kiểm tra * .spec.js. Ví dụ: src / foo / foo.js được kiểm tra bởi src / foo / foo.spec.js.
Để chạy tất cả các thử nghiệm có tên * .spec.js theo quy ước:
"scripts": {
"test": "mocha **/*.spec.js"
},
Sau đó, để chạy tất cả các cuộc gọi thử nghiệm:
npm test
Xem mô hình ở đây? Tốt :) Kiên định đánh bại làng .
Không sử dụng tùy chọn -g hoặc --grep, mẫu đó hoạt động theo tên của thử nghiệm bên trong nó (), chứ không phải hệ thống tệp. Các tài liệu hiện tại là sai lệch và / hoặc hoàn toàn sai liên quan đến điều này. Để giới hạn toàn bộ lệnh trong một phần của hệ thống tệp, bạn có thể truyền một mẫu làm đối số cuối cùng (không phải là cờ).
Ví dụ: lệnh này sẽ đặt phóng viên của bạn thành thông số nhưng sẽ chỉ kiểm tra các tệp js ngay bên trong thư mục kiểm tra máy chủ:
mocha --reporter spec server-test/*.js
Lệnh này sẽ thực hiện tương tự như trên, cộng với nó sẽ chỉ chạy các trường hợp thử nghiệm trong đó chuỗi () định nghĩa / kiểm tra của nó bắt đầu bằng "Fnord:":
mocha --reporter spec --grep "Fnord:" server-test/*.js
Chạy tất cả các tệp trong test_directory
bao gồm các thư mục phụ phù hợptest.js
find ./parent_test_directory -name '*test.js' | xargs mocha -R spec
hoặc sử dụng công --recursive
tắc
mocha --recursive test_directory/
Tôi đã có vấn đề này ngay bây giờ và giải quyết nó bằng cách loại bỏ --recursive
tùy chọn (mà tôi đã đặt) và sử dụng cùng một cấu trúc được đề xuất ở trên:
mochify "test/unit/**/*.js"
Điều này đã chạy tất cả các bài kiểm tra trong tất cả các thư mục theo /test/unit/
tôi trong khi bỏ qua các thư mục khác trong/test/
Bây giờ một ngày (năm 2020) bạn có thể xử lý việc này bằng tệp cấu hình mocha :
Bước 1: Tạo tệp .mocharc.js tại vị trí gốc của ứng dụng của bạn
Bước 2: Thêm mã dưới đây vào tệp cấu hình mocha:
'use strict';
module.exports = {
spec: 'src/app/**/*.test.js'
};
Để biết thêm tùy chọn trong tệp cấu hình, hãy tham khảo liên kết này: https://github.com/mochajs/mocha/blob/master/example/config/.mocharc.js
Tôi đang dùng Windows 7 bằng node.js v0.10.0 và mocha v1.8.2 và npm v1.2.14. Tôi chỉ cố gắng để mocha sử dụng bài kiểm tra đường dẫn / đơn vị để tìm các bài kiểm tra của mình, Sau khi dành thời gian dài và thử một vài thứ tôi đã hạ cánh,
Sử dụng tùy chọn "test / unit / *. Js" không hoạt động trên windows. Vì những lý do chính đáng mà windows shell không mở rộng các ký tự đại diện như unixen.
Tuy nhiên, sử dụng "test / unit" không hoạt động, không có mẫu tệp. ví dụ. "mocha test / unit" chạy tất cả các tệp được tìm thấy trong thư mục test / unit.
Điều này chỉ chạy một tệp thư mục dưới dạng thử nghiệm nhưng bạn có thể truyền nhiều tên thư mục làm tham số.
Ngoài ra để chạy một tệp thử nghiệm, bạn có thể chỉ định đường dẫn và tên tệp đầy đủ. ví dụ. "kiểm tra mocha / đơn vị / mytest1.js"
Tôi thực sự thiết lập trong gói.json cho npm "scripts": {"test": "mocha test / unit"},
Vì vậy, 'npm test' chạy thử nghiệm đơn vị của tôi.
--recursive
tùy chọn như sau:mocha --recursive "some_dir"
node_modules\.bin\mocha "test\unit\*.js"
hoạt động trên Windows. Cũng node_modules\.bin\mocha "**\*.js"
hoạt động (trường hợp thực tế của tôi). Nhưng tôi đang tìm cách để loại trừ thư mục node_modules . (Tôi cũng sử dụng gulpfile.js nhưng đôi khi tôi cần khởi chạy thử nghiệm trực tiếp với mocha)
Nếu bạn đang sử dụng nodejs
, trong của bạn package.json
dướiscripts
global (-g)
cài đặt: "test": "mocha server-test"
hoặc "test": "mocha server-test/**/*.js"
cho các bản đồ conproject
cài đặt: "test": "node_modules/mocha/bin/mocha server-test"
hoặc "test": "node_modules/mocha/bin/mocha server-test/**/*.js"
cho các bản đồ conSau đó, chỉ cần chạy thử nghiệm của bạn bình thường như npm test
npm run mocha "./test/*.spec.js!(~)"
bỏ qua các đối số toàn cầu, nhưng node_modules/.bin/mocha "./test/*.spec.js!(~)"
không.
npm run mocha -- yourArgs
Đây dường như không phải là bất kỳ sự hỗ trợ "dễ dàng" nào để thay đổi thư mục kiểm tra.
Tuy nhiên, có lẽ bạn nên xem xét vấn đề này , liên quan đến câu hỏi của bạn.
Như @ jeff-dickey đã đề xuất, trong thư mục gốc của dự án, hãy tạo một thư mục có tên test
. Trong thư mục đó, tạo một tệp gọi là mocha.opts
. Bây giờ khi tôi cố gắng cải thiện câu trả lời của Jeff, điều làm việc cho tôi là thay vì chỉ định tên của một thư mục thử nghiệm, tôi đã chỉ định một mẫu để tìm tất cả các thử nghiệm để chạy trong dự án của mình bằng cách thêm dòng này:
*/tests/*.js --recursive
trong mocha.opts
Thay vào đó, nếu bạn muốn chỉ định các thư mục chính xác để tìm kiếm các bài kiểm tra, tôi đã làm một cái gì đó như thế này:
shared/tests/*.js --recursive
server/tests/graph/*.js --recursive
Tôi hy vọng điều này sẽ giúp bất cứ ai cần nhiều hơn những gì các câu trả lời khác cung cấp
.only
và.skip
quản lý bài kiểm tra nào đang chạy. Quan trọng trong quá trình phát triển một tính năng cụ thể khi bạn không muốn đợi toàn bộ bộ kiểm tra chạy mọi lúc.