Làm cách nào để chạy thử nghiệm đơn bằng Jest?


355

Tôi có một thử nghiệm 'hoạt động với trẻ em lồng nhau' trong tệp fix-order-test.js.

Chạy bên dưới chạy tất cả các bài kiểm tra trong tập tin.

jest fix-order-test

Làm thế nào để tôi chỉ chạy một thử nghiệm duy nhất? Dưới đây không hoạt động khi nó tìm kiếm một tập tin của regex được chỉ định.

jest 'works with nested children'


kể từ khi bạn sử dụng dòng lệnh jest, có thể qua npm, sau đó chỉ cần thêm --testNamePattern 'works with nested children' Tùy chọn Jest CLI #testNamePotype
steven87vt

@BioGenX: liên kết hiện đã bị hỏng
Dan Dascalescu

Câu trả lời:


427

Từ dòng lệnh sử dụng --testNamePatternhoặc -tcờ

jest -t 'fix-order-test'

Điều này sẽ chỉ chạy thử nghiệm phù hợp với mẫu tên thử nghiệm bạn cung cấp. Đó là trong các tài liệu Jest .

Một cách khác là chạy thử nghiệm trong chế độ xem jest --watchvà sau đó nhấn pđể lọc các thử nghiệm bằng cách nhập tên tệp thử nghiệm hoặc tđể chạy một tên thử nghiệm.


Nếu bạn có một itbên trong một describekhối, bạn phải chạy

jest -t '<describeString> <itString>'

Tôi đang nhận được các tùy chọn không được công nhận cho -t. Vâng, các tài liệu có đề cập đến nó. Cờ đã được thêm vào 16.0. Tôi đang ở phiên bản mới nhất. jest -help dường như không đề cập đến cờ. Cảm ơn.
vijayst

12
Chỉ cần lưu ý rằng đây là mẫu thử nghiệm cho tên thử nghiệm cụ thể bên trong it()hàm chứ không phải tên tệp. Đó là những gì tôi nghĩ.
HussienK

70
Nếu sử dụng thử nghiệm npm, bạn cần thực hiệnnpm test -- -t "fix order test"
Sarsaparilla

3
Điều này làm việc cho tôi nhưng nó cũng bỏ qua mọi thử nghiệm khác trong dự án vốn chậm đối với các dự án lớn. Chỉ định một tệp thử nghiệm cụ thể mà thử nghiệm thực sự có ích:./node_modules/.bin/jest --config=./.jest.config.json ./src/x/y/sites.js/sitesWorker.test.js -t 'given only incorrect sites'
anon58192932

Hoạt động với tôi với việc chỉ định <descriptionString>, tôi đã nhận thấy rằng nó có cường độ chậm hơn so với grep của mocha (-g 'searchString') - nhưng tôi sẽ lấy nó :-)
schmoopy

125

Tài liệu của Jest khuyến nghị như sau:

Nếu thử nghiệm thất bại, một trong những điều đầu tiên cần kiểm tra là thử nghiệm có bị lỗi hay không khi đó là thử nghiệm duy nhất chạy. Trong Jest, thật đơn giản để chỉ chạy một thử nghiệm - chỉ cần tạm thời thay đổi test lệnh đó thành mộttest.only

test.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

hoặc là

it.only('this will be the only test that runs', () => {
   expect(true).toBe(false);
});

7
Làm việc cho tôi với jest 20.0.4. Mặc dù nó chỉ bỏ qua các bài kiểm tra còn lại trong tập tin đó. Các thử nghiệm trong các tệp khác tiếp tục chạy, trừ khi bạn đã giới hạn việc chạy đối với một tệp.
Holf

7
Mặc dù đó là một trò hề - bởi vì nó chạy các bài kiểm tra không đồng bộ nên có thể không xác định được bài kiểm tra nào sẽ chạy trong tập tin nào ngay từ đầu. Vì vậy, nó sẽ chạy tất cả các tệp theo mặc định và VÀO các tệp kiểm tra test.only. Vì vậy, nếu bạn chỉ muốn chạy một thử nghiệm trong một tệp có nhiều trường hợp thử nghiệm trong một bộ thử nghiệm bao gồm nhiều tệp bạn không may chạy tệp duy nhất đójest myTestFile.test.js
không ổn định vào

@johnslay: Nó đã làm, chỉ cần thử nghiệm nó
flakes

@flaky Tôi đoán tôi có ý nói nó không hoạt động khi chạy npm test. Bạn sẽ phải tự chạy tệp hoặc nhấn pđể đặt bộ lọc.
johnslay

3
@johnslay tốt, nhờ đọc các ý kiến trước đó trước khi viết trả lời của bạn tôi đoán / s :)
flaky

55

Như đã đề cập trong các câu trả lời khác, test.onlychỉ lọc các thử nghiệm khác trong cùng một tệp . Vì vậy, các bài kiểm tra trong các tập tin khác vẫn sẽ chạy.

Vì vậy, để chạy thử nghiệm duy nhất, có hai cách tiếp cận:

  • Tùy chọn 1: Nếu tên thử nghiệm của bạn là duy nhất, bạn có thể nhập ttrong khi ở chế độ đồng hồ và nhập tên thử nghiệm mà bạn muốn chạy.

  • Lựa chọn 2:

    1. Nhấn ptrong khi ở chế độ xem để nhập regex cho tên tệp bạn muốn chạy. (Các lệnh có liên quan như thế này được hiển thị khi bạn chạy Jest ở chế độ đồng hồ).
    2. Thay đổi itthành it.onlybài kiểm tra bạn muốn chạy.

Với một trong các cách tiếp cận ở trên, Jest sẽ chỉ chạy thử nghiệm duy nhất trong tệp bạn đã chỉ định.


54

Lệnh đầy đủ để chạy thử nghiệm Jest duy nhất

Chỉ huy:

node <path-to-jest> -i <you-test-file> -c <jest-config> -t "<test-block-name>"

  • <path-to-jest>:
    • Các cửa sổ: node_modules\jest\bin\jest.js
    • Khác: node_modules/.bin/jest
  • -i <you-test-file>: đường dẫn đến tệp với các bài kiểm tra ( jshoặc ts)
  • -c <jest-config>: đường dẫn đến tệp cấu hình Jest riêng (JSON), nếu bạn giữ cấu hình Jest của mình, package.jsonbạn không phải chỉ định tham số này (Jest sẽ tìm thấy nó mà không cần sự trợ giúp của bạn)
  • -t <the-name-of-test-block>: Thực sự đó là một tên (các tham số đầu tiên) của describe(...), it(...)hoặc test(...)khối.

Thí dụ:

describe("math tests", () => {

  it("1 + 1 = 2", () => {
    expect(1 + 1).toBe(2);
  });

  it("-1 * -1 !== -1", () => {
    expect(-1 * -1).not.toBe(-1);
  });

});

Vì vậy, lệnh

node node_modules/jest/bin/jest.js -i test/math-tests.js -c test/tests-config.json -t "1 + 1 = 2"

sẽ kiểm tra it("1 + 1 = 2", ...), nhưng nếu bạn thay đổi -ttham số "math tests"thì nó sẽ chạy cả hai bài kiểm tra từ describe("math tests",...)khối.

Nhận xét:

  1. Đối với Windows thay thế node_modules/.bin/jestbằng node_modules\jest\bin\jest.js.
  2. Cách tiếp cận này cho phép bạn gỡ lỗi tập lệnh đang chạy. Để bật gỡ lỗi thêm '--inspect-brk'tham số cho lệnh.

Chạy thử nghiệm Jest duy nhất thông qua các tập lệnh NPM trong 'pack.json'

Có Jest cài đặt, bạn có thể đơn giản hóa cú pháp của lệnh này (ở trên) bằng cách sử dụng các tập lệnh NPM . Trong "package.json"thêm một kịch bản mới cho "scripts"phần:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t \"math tests\"",
}

Trong trường hợp này, chúng tôi sử dụng một bí danh 'jest'thay vì viết đường dẫn đầy đủ đến nó. Ngoài ra, chúng tôi không chỉ định đường dẫn tệp cấu hình vì chúng tôi cũng có thể đặt nó vào "package.json"và Jest sẽ xem xét theo mặc định. Bây giờ bạn có thể chạy lệnh:

npm run test:math

"math tests"khối với hai bài kiểm tra sẽ được thực hiện. Hoặc, tất nhiên, bạn có thể chỉ định một thử nghiệm cụ thể theo tên của nó.

Một tùy chọn khác là kéo <the-name-of-test-block>tham số bên ngoài "test:math"tập lệnh và truyền nó từ lệnh NPM:

gói.json:

"scripts": {
  "test:math": "jest -i test/my-tests.js -t",
}

Chỉ huy:

npm run test:math "math tests"

Bây giờ bạn có thể quản lý tên của (các) bài kiểm tra chạy với lệnh ngắn hơn nhiều.

Nhận xét:

  1. Các 'jest'lệnh sẽ làm việc với NPM kịch bản vì

    npm làm cho "./node_modules/.bin"mục nhập đầu tiên trong PATHbiến môi trường khi chạy bất kỳ tập lệnh vòng đời nào, vì vậy điều này sẽ hoạt động tốt, ngay cả khi chương trình của bạn không được cài đặt toàn cầu ( blog NPM )

  2. Cách tiếp cận này dường như không cho phép gỡ lỗi vì Jest được chạy thông qua nhị phân / CLI , không thông qua node.

Chạy thử nghiệm Jest đã chọn trong Visual Studio Code

Nếu bạn đang sử dụng Visual Studio Code, bạn có thể tận dụng nó và chạy thử nghiệm hiện được chọn (trong trình chỉnh sửa mã) bằng cách nhấn F5nút. Để làm điều này, chúng ta sẽ cần tạo một khối cấu hình khởi chạy mới trong ".vscode/launch.json"tệp. Trong cấu hình đó, chúng tôi sẽ sử dụng các biến được xác định trước được thay thế bằng các giá trị thích hợp (không may luôn luôn ) khi chạy. Trong tất cả các có sẵn, chúng tôi chỉ quan tâm đến những điều này:

  • ${relativeFile} - tệp đã mở hiện tại liên quan đến ${workspaceFolder}
  • ${selectedText} - văn bản được chọn hiện tại trong tệp hoạt động

Nhưng trước khi viết ra cấu hình khởi chạy, chúng ta nên thêm 'test'tập lệnh vào 'package.json'(nếu chúng ta chưa có tập lệnh này).

gói.json:

"scripts": {
  "test": "jest"
}

sau đó chúng ta có thể sử dụng nó trong cấu hình khởi chạy của chúng tôi.

Khởi chạy cấu hình:

{
  "type": "node",
  "request": "launch",
  "name": "Run selected Jest test",
  "runtimeExecutable": "npm",
  "runtimeArgs": [
    "run-script",
    "test"
  ],
  "args": [
    "--",
    "-i",
    "${relativeFile}",
    "-t",
    "${selectedText}"
  ],
  "console": "integratedTerminal",
}

nó thực sự làm giống như các lệnh được mô tả trước đó trong câu trả lời này. Bây giờ mọi thứ đã sẵn sàng, chúng tôi có thể chạy bất kỳ thử nghiệm nào chúng tôi muốn mà không phải viết lại các tham số lệnh bằng tay.

Đây là tất cả những gì bạn cần làm:

  1. Chọn cấu hình khởi chạy hiện được tạo trong bảng gỡ lỗi:

chọn khởi chạy cấu hình trong bảng gỡ lỗi VSCode

  1. Mở tệp bằng các bài kiểm tra trong trình chỉnh sửa mã và chọn tên của bài kiểm tra bạn muốn kiểm tra (không có dấu ngoặc kép):

chọn tên kiểm tra

  1. Nhấn 'F5'nút.

Và Voila!

Bây giờ để chạy bất kỳ thử nghiệm nào bạn muốn chỉ cần mở nó trong trình chỉnh sửa, chọn tên của nó và nhấn F5.

Thật không may, nó sẽ không phải là "voila" trên các máy Windows vì chúng thay thế (ai biết tại sao) ${relativeFile}biến với đường dẫn bị đảo ngược và Jest sẽ không hiểu đường dẫn như vậy.

Nhận xét:

  1. Để chạy theo trình gỡ lỗi, đừng quên thêm '--inspect-brk'tham số.
  2. Trong ví dụ cấu hình này, chúng tôi không có tham số cấu hình Jest giả sử rằng nó được bao gồm trong 'package.json'.

1
Thông minh! Đây phải là câu trả lời được chấp nhận. Đặc biệt là nếu nó thêm một đề cập đến npxđể đơn giản hóa rất nhiều việc gọi Jest, bất kể HĐH.
Dan Dascalescu

19

Bạn cũng có thể sử dụng fhoặc xđể tập trung hoặc loại trừ một bài kiểm tra. Ví dụ

fit('only this test will run', () => {
   expect(true).toBe(false);
});

it('this test will not run', () => {
   expect(true).toBe(false);
});

xit('this test will be ignored', () => {
   expect(true).toBe(false);
});

1
Không chắc chắn tại sao câu trả lời này bị hạ cấp, nó dường như trả lời câu hỏi và hoạt động.
mbillard

1
xitđã làm việc cho tôi, nhưng fitkhông. tôi đang sử dụng jest@22.4.4.
Hinrich

fithoạt động trong jest@23.1.0 cho tôi.
jcubic

Tôi nghĩ rằng nhược điểm chính của phương pháp này là - nếu bạn chỉ cố gắng đi sâu vào một bài kiểm tra để sửa lỗi - nó đòi hỏi những thay đổi không cần thiết đối với các tệp kiểm tra cơ bản. Nếu vì bất kỳ lý do gì, bạn muốn duy trì mã kiểm tra (trên các cam kết, giả sử) thì điều này có thể có ý nghĩa.
webelo

fnó chỉ hoạt động trong một tập tin.
Serge

14

Như đã nói ở trên, bạn có thể chạy lệnh

jest -t 'fix-order-test'

Nếu bạn có một itbên trong một describekhối, bạn phải chạy

jest -t '<describeString> <itString>'

13

Nếu bạn đã jestchạy như một lệnh script, một cái gì đó giống như npm test, bạn cần sử dụng lệnh sau để làm cho nó hoạt động:

npm test -- -t "fix order test"

8

với phiên bản jest mới nhất , bạn có thể sử dụng một trong những cách sau để chỉ chạy một thử nghiệm, tương tự cho bộ thử nghiệm.

it.only('test 1', () => {})

test.only('test 1', () => {})

fit('test 1', () => {})

jest 'test 1' cũng có thể hoạt động nếu tên thử nghiệm là duy nhất.


4

Trong VS Code, điều này cho phép tôi chạy / gỡ lỗi chỉ 1 bài kiểm tra Jest, với các điểm dừng: https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests

Của tôi launch.jsoncó cái này bên trong:

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Jest All",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["--runInBand"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    },
    {
      "type": "node",
      "request": "launch",
      "name": "Jest Current File",
      "program": "${workspaceFolder}/node_modules/.bin/jest",
      "args": ["${relativeFile}"],
      "console": "integratedTerminal",
      "internalConsoleOptions": "neverOpen",
      "windows": {
        "program": "${workspaceFolder}/node_modules/jest/bin/jest",
      }
    }
  ]
}

và điều này trong package.json:

  "scripts": {
    "test": "jest"
  }
  • Để chạy 1 thử nghiệm, trong thử nghiệm đó, thay đổi test(hoặc it) thành test.only(hoặc it.only). Để chạy 1 bộ thử nghiệm (một số thử nghiệm), hãy đổi describethành describe.only.
  • Đặt điểm dừng nếu bạn muốn.
  • Trong Mã VS, đi đến Chế độ xem gỡ lỗi (Shift + Cmd + D).
  • Từ menu thả xuống ở trên, chọn Jest Current File.
  • Nhấp vào mũi tên màu xanh lá cây để chạy thử nghiệm đó.

Trong trường hợp của tôi, cấu hình của bạn chỉ chạy một thử nghiệm (với it.only (...)), nhưng nó không dừng ở các điểm dừng :(
Tudor Leustean

Bắt JavaScript để đạt các điểm dừng trong trình gỡ lỗi có thể khó khăn, vì bản chất không đồng bộ của nó. Trong VS Code, chơi xung quanh nơi bạn đặt các điểm dừng của mình, cộng với các lệnh trong menu Debug, cho đến khi nó chạm vào chúng. Nếu nó tiếp tục bỏ qua các điểm dừng, hãy đặt EARLIER vào mã của bạn. Nếu 1 tệp gọi một chức năng trong một tệp khác, hãy đặt điểm dừng tại lệnh gọi chức năng đó, sau đó "Bước vào" cuộc gọi để nhảy tệp. Chơi với các lệnh Gỡ lỗi này: "Bước qua, Bước vào, Bước ra, Tiếp tục"
Raymond Gan

Trên thực tế, bạn không cần phải "scripts": { "test": "jest" }package.jsonvì bạn đã xác định đường dẫn đầy đủ trong "program"tham số trong launch.json.
Serge

3

Đây là mất của tôi:

./node_modules/.bin/jest --config test/jest-unit-config.json --runInBand src/components/OpenForm/OpenForm.spec.js -t 'show expanded'

Ghi chú:

  • ./node_modules/.bin/...là một cách tuyệt vời, để truy cập vào tệp nhị phân jest (hoặc mocha hoặc ...) được cài đặt cục bộ đi kèm với gói được cài đặt cục bộ. (vâng, trong các tập lệnh npm của bạn, bạn không thể làm jestgì trước đó, nhưng điều này rất hữu ích trên dòng lệnh ... (đó cũng là một khởi đầu tốt cho cấu hình gỡ lỗi của bạn, cho dù bạn đang sử dụng IDE nào ...)
  • dự án của bạn có thể không có một tập hợp các tùy chọn cấu hình. Nhưng nếu có (nhìn vào các tập lệnh trong package.json), đây là, những gì bạn cần.
  • --runInBand - như đã nói, không biết về cấu hình của bạn, nhưng nếu bạn tập trung vào phát triển / sửa một thử nghiệm duy nhất, bạn không muốn đối phó với nhân viên web ...
  • có, bạn có thể cung cấp toàn bộ, đường dẫn rõ ràng cho tệp của bạn
  • tùy chọn , bạn có thể sử dụng -tđể không chạy tất cả các thử nghiệm trong tệp đó mà chỉ một thử nghiệm duy nhất (ở đây: một thử nghiệm có cái gì đó có ' show expanded' trong tên của nó). Hiệu ứng tương tự có thể đạt được bằng cách dán .only()vào tập tin đó.

3

chỉ là một tiện ích nhỏ, bởi vì dường như có một cuộc chiến nếu sử dụng ./node_modules/.bin/jest -i ...hoặc chỉ jest -i ...hoặcnpm test -- -i ...

  1. chỉ gọi jestcông việc nếu bạn đã cài đặt nó trên toàn cầu (như với npm install -g jest), một cách xử lý phụ thuộc không quá rõ ràng
  2. nếu bạn đã cài đặt jest cục bộ trong gói và muốn gọi tập lệnh jest mà không có đường vòng kịch bản npm, bạn có thể sử dụng npx jest -i ...=> đây chính xác là npx dành cho. cứu bạn khỏi viết./node_modules/.bin/...

0

Hiện tại có một plugin jest đẹp cho cái này được gọi là jest-watch-typeaheadnó làm cho quá trình này đơn giản hơn nhiều.


0
npm run test -- test-name

Điều này sẽ chỉ hoạt động nếu tên thông số thử nghiệm của bạn là duy nhất. Các mã ở trên sẽ tham khảo

một tập tin có tên này: test-name.component.spec.ts

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.