Làm cách nào để chạy thử nghiệm đơn với Mocha?


292

Tôi sử dụng Mocha để kiểm tra công cụ JavaScript của mình. Tập tin kiểm tra của tôi chứa 5 bài kiểm tra. Có thể chạy thử nghiệm cụ thể (hoặc bộ thử nghiệm) thay vì tất cả các thử nghiệm trong tệp không?

Câu trả lời:


355

Hãy thử sử dụng tùy chọn của mocha--grep :

    -g, --grep <pattern>            only run tests matching <pattern>

Bạn có thể sử dụng bất kỳ regex JavaScript hợp lệ nào như <pattern>. Chẳng hạn, nếu chúng ta có test/mytest.js:

it('logs a', function(done) {
  console.log('a');
  done();
});

it('logs b', function(done) {
  console.log('b');
  done();
});

Sau đó:

$ mocha -g 'logs a'

Để chạy thử nghiệm duy nhất. Lưu ý rằng điều này greps qua tên của tất cả describe(name, fn)it(name, fn) yêu cầu.

Cân nhắc sử dụng các describe()cuộc gọi lồng nhau cho không gian tên để giúp dễ dàng xác định vị trí và chọn các bộ cụ thể.


1
Cảm ơn! Tôi đã có ấn tượng rằng --grepchỉ được lọc từ các @thẻ.
kumarharsh

5
Khi sử dụng Mocha theo lập trình (ví dụ từ Grunt), có một tùy chọn Catch: grep cần phải là một đối tượng रRegExp (). Nếu đó là một chuỗi, nó sẽ được thoát.
h-kippo

1
đây là giải pháp duy nhất hiệu quả với tôi chỉ định tệp trên dòng lệnh ( mocha some/test.js) hoàn toàn không hoạt động. cảm ơn!
hraban

2
Bất cứ cách nào để tránh cũng chạy logs a bcdmà chứa logs achuỗi con? Regexp ^$không làm việc trên 0.10.2.
Ciro Santilli 郝海东 冠状 病 事件

Cảm ơn. Tôi nhận được một số lỗi nếu tôi không chỉ định thư mục là mocha -g 'log a'.
kta

166

Tùy thuộc vào mô hình sử dụng, bạn có thể chỉ muốn sử dụng chỉ . Chúng tôi sử dụng phong cách TDD; nó trông như thế này:

test.only('Date part of valid Partition Key', function (done) {
    //...
}

Chỉ kiểm tra này sẽ chạy từ tất cả các tập tin / bộ.


5
BDD hoạt động như nhau. Điều này là tuyệt vời khi bạn đang làm một bài kiểm tra. Nó cũng có thể được sử dụng ở cấp độ bộ / mô tả
andyzinsser

14
Với chai và mong đợi cú pháp đó sẽ được it.only.
elkelk

4
Câu trả lời này tốt hơn vì nó cũng sẽ hoạt động khi mocha được sử dụng từ bên trong nghiệp, v.v.
Vivek Kodira

2
it.onlysẽ không làm việc cùng với givencác mocha-TestData . Và thật dễ dàng để quên để loại bỏ nó sau này.
Tr1et

4
eslint-plugin-mochacó một quy tắc no-exclusive-testssẽ bắt bạn nếu bạn quên loại bỏ .only.
dostu

84

Nếu bạn đang sử dụng npm test(sử dụng tập lệnh pack.json), hãy sử dụng thêm-- để truyền tham số cho mocha

ví dụ npm test -- --grep "my second test"

EDIT : Có vẻ như --grepcó thể hơi cầu kỳ (có thể phụ thuộc vào các đối số khác). Bạn có thể:

Sửa đổi gói.json:

"test:mocha": "mocha --grep \"<DealsList />\" .",

Hoặc sử dụng thay thế --bailmà dường như ít cầu kỳ hơn

npm test -- --bail

3
Đã làm cho tôi. Cảm ơn :)
Jill-Jênn Vie 8/11/2016

1
@Andy --grep có thể hơi cầu kỳ - hãy thử đặt nó ngay sau mocha trong mục nhập tập lệnh npm. Khác npm test -- --baillà hữu ích để bảo lãnh sau thử nghiệm thất bại đầu tiên
Ashley Coolman

1
vượt qua dấu gạch ngang trước khi --greplưu ngày của tôi! Cảm ơn rất nhiều. Tái bút Tôi đang dùng Windows, đang chạynpm test -- --grep @tag
Mykola

18

chạy thử nghiệm đơn tên tập tinbyby

Trên thực tế, người ta cũng có thể chạy thử nghiệm mocha duy nhất bằng tên tệp (không chỉ bằng „it () - chuỗi grepping) nếu bạn xóa mẫu hình cầu (ví dụ ./test/**/*.spec.js) khỏi mocha.opts, tương ứng tạo một bản sao, không có:

node_modules/.bin/mocha --opts test/mocha.single.opts test/self-test.spec.js

Đây là mocha.single.opts của tôi (nó chỉ khác ở chỗ thiếu dòng toàn cầu đã nói ở trên)

--require ./test/common.js
--compilers js:babel-core/register
--reporter list
--recursive

Bối cảnh: Mặc dù bạn có thể ghi đè các công tắc khác nhau từ opts-File (bắt đầu bằng --), bạn không thể ghi đè toàn cầu . Liên kết đó cũng có một số giải thích.

Gợi ý: nếu node_modules/.bin/mochabạn nhầm lẫn, hãy sử dụng gói mocha cục bộ. Bạn cũng có thể viết mocha, nếu bạn đã cài đặt nó trên toàn cầu.


Và nếu bạn muốn các tiện ích của package.json: Still: xóa toàn **/*cầu -ish khỏi bạn mocha.opts, chèn chúng vào đây, để kiểm tra tất cả, hãy để chúng đi cho thử nghiệm duy nhất:

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

sử dụng:

> npm run test

tương ứng

> npm run test-single -- test/ES6.self-test.spec.js 

(nhớ cái này --!)


$ 1 không cần thiết trong thiết lập của tôi, thay vào đó, nó dẫn đến các cảnh báo như: Warning: Could not find any test files matching pattern: $1
Merijn Vogel

15

Chỉ cần sử dụng .only trước khi 'mô tả', 'nó' hoặc 'bối cảnh'. Tôi chạy bằng cách sử dụng "$ npm run test: unit" và nó chỉ thực thi các đơn vị với .only.

describe.only('get success', function() {
 // ...
});

it.only('should return 1', function() {
  // ...
});

11

Hi giải pháp trên không làm việc cho tôi. Một cách khác để chạy thử nghiệm duy nhất là

mocha test/cartcheckout/checkout.js -g 'Test Name Goes here'

Điều này giúp chạy một trường hợp thử nghiệm từ một tệp duy nhất và với tên cụ thể.


1
Sử dụng một biểu thức đủ chọn lọc cho -g và bạn sẽ không cần chỉ định tên tệp. Nếu bạn không thể viết một biểu thức đủ chọn lọc, điều đó có nghĩa là bạn không đặt tên cho các bài kiểm tra của mình đúng cách.
Louis

10
npm test <filepath>

ví dụ :

npm test test/api/controllers/test.js

ở đây 'test / api / controls / test.js' là filepath.


8

Bạn có thể thử "it.only"

 it.only('Test one ', () => {

            expect(x).to.equal(y);
        });
it('Test two ', () => {

            expect(x).to.equal(y);
        });

trong đó cái đầu tiên sẽ chỉ thực hiện


2
Nguy hiểm nếu các bài kiểm tra không được thực hiện thông qua --forbid-onlytrên máy chủ CI / build. .onlycó xu hướng lẻn vào nhánh chính và khiến các bài kiểm tra khác bị tắt tiếng khi chúng không thực hiện nữa. Tôi đã nghĩ đến quy trình thay đổi mã để chạy các thử nghiệm khác nhau về tính năng chống. Người chạy thử nên xác định thử nghiệm nào sẽ được thực hiện (còn gọi là thử nghiệm được gắn thẻ) không phải là nhà phát triển.
k0pernikus

Tôi đã sử dụng điều này để kiểm tra một chức năng trong địa phương của mình, Lưu ý: không cam kết mã với it.onlyrepo
Bikesh M

5

Nhìn vào https://mochajs.org/#usage chúng tôi thấy rằng chỉ cần sử dụng

kiểm tra mocha / myfile

sẽ làm việc. Bạn có thể bỏ qua '.js' ở cuối.


0

Không chắc chắn tại sao phương thức grep không hoạt động với tôi khi sử dụng thử nghiệm npm. Điều này làm việc mặc dù. Tôi cũng cần chỉ định thư mục kiểm tra vì một số lý do.

kiểm tra npm - test / somest.js


0

Hợp nhất tất cả các thử nghiệm của bạn trong một tệp test.js và gói json của bạn thêm tập lệnh dưới dạng:

  "scripts": {
  "api:test": "node_modules/.bin/mocha --timeout 10000 --recursive api_test/"
},

Gõ lệnh trên thư mục kiểm tra của bạn:

npm run api:test
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.