Làm thế nào để xác định thư mục thử nghiệm cho mocha?


219

Mocha cố gắng tìm các tệp kiểm tra theo testmặc định, làm cách nào để chỉ định một thư mục khác, ví dụ server-test?


Mặc dù không phải là 100% câu trả lời cho câu hỏi của bạn, hãy xem jaketrent.com/post/run-single-mocha-test - Tôi đến đây để tìm cách chạy bộ kiểm tra cụ thể và điều này cho thấy bạn có thể sử dụng .only.skipquả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.
Dave Sag

Câu trả lời:


141

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 mochatrên dòng lệnh, nhưng muốn chạy thử nghiệm trong một thư mục ./server-teststhay vì ./test, hãy tạo một tệp ./test/mocha.optschỉ 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/


12
Đây là tùy chọn có ít ma sát nhất và phải là câu trả lời được chấp nhận IMHO
Nick Tomlin

Tôi đang sử dụng một trong các tấm nồi hơi và nó ở dòng sau, có thể là do các cửa sổ, bạn có thể vui lòng kiểm tra một lần.node ./node_modules/mocha/bin/mocha $ (tìm api -name '* -test.js') --compilers js: babel-core / register
kobe

1
một viên ngọc, cũng chơi độc đáo với các cấu hình gỡ lỗi mocha Webstorm IDE, chỉ cần chọn "mẫu tệp" và để trống đầu vào, và nó sẽ sử dụng mocha.opts
danday74

3
Đó chắc chắn là câu trả lời tốt nhất. Có lẽ hầu hết nó sẽ có giá trị để thêm vào câu trả lời của bạn cũng là mocha.optstậ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 mochaxá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
quirimmo

1
bạn cũng có thể chỉ đặt --recursive trong dòng lệnh mocha, hữu ích nếu bạn xác định tập lệnh kiểm tra trong
gói.json

282

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.


1
Điều này không làm việc cho tôi. Nếu tôi muốn làm theo cách này thì tôi phải làmmocha test/server-test
jonnie

22
Vấn đề báo giá kép đã cho tôi từ lâu! Cảm ơn bạn đã tiết kiệm sự tỉnh táo của tôi. Hét lên với mọi người đọc nó để quan tâm thêm đến những trích dẫn kép đó.
ctrlplusb

11
Trong trường hợp của tôi, tôi đã sử dụng 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ó.
Stoutie

1
hoặc chỉ sử dụng --recursivenhư tôi giải thích bên dưới
Jeff Dickey

4
Đây nên là câu trả lời! Các trích dẫn kép giúp tôi tiết kiệm
Minh Thái

81

Đâ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')

29
hoặc chỉ sử dụng --recursivenhư tôi giải thích bên dưới
Jeff Dickey

5
Vì vậy, nói cách khác mochakhô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?
Xanh

người dùng ứng dụng khách $ mocha $ (tìm các bài kiểm tra -name '* .js') -bash: mocha: lệnh không tìm thấy; Bắt lỗi này.
lft93ryt

1
Điều này quá phức tạp và sai lệch. Thích các tùy chọn mocha hơn là sử dụng lệnh OS.
Michael Bushe

bài viết của bạn không trả lời câu hỏi
ekkis

30

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 .


Đây là cách chính xác nhất để làm điều này tôi đoán.
ArturS

29

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

22

Nếu trong node.js , một số cấu hình mới kể từ Mocha v6 :

Tùy chọn 1: Tạo .mocharc.jsontrong thư mục gốc của dự án:

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

Tùy chọn 2: thêm mochatài sản trong dự án package.json:

{
  ...

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

Nhiều lựa chọn hơn ở đây .


20

Chạy tất cả các tệp trong test_directorybao 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 --recursivetắc

mocha --recursive test_directory/

11

Tôi đã có vấn đề này ngay bây giờ và giải quyết nó bằng cách loại bỏ --recursivetù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/


9

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 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


3

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.


11
Kể từ hôm nay, người ta có thể sử dụng --recursivetùy chọn như sau:mocha --recursive "some_dir"
superjos

3
Sử dụng 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)
Alex 75

3

Nếu bạn đang sử dụng nodejs, trong của bạn package.jsondướiscripts

  1. Để global (-g)cài đặt: "test": "mocha server-test"hoặc "test": "mocha server-test/**/*.js"cho các bản đồ con
  2. Để projectcà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 đồ con

Sau đó, chỉ cần chạy thử nghiệm của bạn bình thường như npm test


Tôi thấy rằng 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.
ủi sắt

@ironchicken để chuyển các đối số từ sử dụng "npm run" - như trongnpm run mocha -- yourArgs
Pedro A

3

Như @superjos đã đề cập trong phần sử dụng bình luận

mocha --recursive "some_dir"


2

Đâ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.


2

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.