Chỉ chạy MỘT bài kiểm tra với Jest


95

Rất đơn giản, tôi chỉ muốn chạy một bài kiểm tra với Jest.

Tôi đã đặt it.onlyhoặc describe.onlynhưng nó vẫn chạy rất nhiều thử nghiệm. Tôi nghĩ rằng nó chạy tất cả các thử nghiệm kể từ lần cam kết cuối cùng của tôi, nhưng nó không nên có hành vi này với onlycờ được đặt rõ ràng, phải không?

Điều gì gây ra hành vi này và cách chạy một thử nghiệm?



Nếu tôi chấp nhận "cờ trùng lặp", nó "sẽ đánh dấu câu hỏi của bạn là trùng lặp, hướng người đọc trong tương lai đến câu hỏi ban đầu và ngăn các câu trả lời khác được đăng ở đây." Tôi không nghĩ chúng hoàn toàn giống nhau, vì mỗi câu hỏi và câu trả lời đều có những cách tiếp cận khác nhau.
jpenna

@jpenna: chỉ cần nhìn vào câu hỏi ban đầu. Các câu trả lời tương tự đã được đưa ra.
Dan Dascalescu

Câu trả lời:


122

Jest song song hóa các lần chạy thử nghiệm và nó không biết trước bài kiểm tra nào nó nên chạy và bài kiểm tra nào không nên chạy. Điều này có nghĩa là khi bạn sử dụng "fit", nó sẽ chỉ chạy một thử nghiệm trong tệp đó nhưng vẫn chạy tất cả các tệp thử nghiệm khác trong dự án của bạn .

fit, fdescribeit.only, describe.onlycó cùng một mục đích, bỏ qua các xét nghiệm khác, chỉ chạy cho tôi.

Nguồn: https://github.com/facebook/jest/issues/698#issuecomment-177673281


Sử dụng jestcơ chế lọc, khi bạn chạy các thử nghiệm của mình như

jest --config=jest.config.json --watch

Bạn có thể lọc các bài kiểm tra bằng dấu testnamehoặc filename, chỉ cần làm theo hướng dẫn trong thiết bị đầu cuối

nhập mô tả hình ảnh ở đây

Nhấn p, sau đó nhập tên tệp

nhập mô tả hình ảnh ở đây

Sau đó, bạn có thể sử dụng describe.onlyit.onlysẽ bỏ qua tất cả các kiểm tra khác từ tệp đã lọc, đã kiểm tra.


1
Tôi đang thực hiện bộ lọc này theo tệp, nhưng thật kỳ lạ ... Vì vậy, bộ lọc .onlyduy nhất hoạt động cho các thử nghiệm của cùng một tệp?
jpenna

2
Tôi thích điều đó hơn nữa .only điều đó, như tôi đã từng quên hoàn tác .only trong mã nguồn và cam kết điều đó.
Dziamid

3
Mặc dù các bài kiểm tra bị bỏ qua, nó dường như vẫn đánh giá mã được kiểm tra trong mỗi ví dụ. Thực sự không có cách nào để chỉ chạy một thử nghiệm duy nhất vào năm 2019?
adaam

@adaam Tôi không chắc mình đã hiểu đúng câu hỏi của bạn hay chưa, vì vậy hãy sửa cho tôi nếu tôi sai. Nếu các thử nghiệm nằm trong các tệp riêng biệt, chỉ mã trong tệp cụ thể được thực thi khi bạn sử dụng mẫu để chạy các thử nghiệm một cách rõ ràng. Khi mã cho tệp cụ thể được thực thi, toàn bộ mã trong tệp đó sẽ được phân tích cú pháp, vì vậy ngay cả khi bạn sử dụng it.onlyhoặc it.skipcho một bài kiểm tra duy nhất có lỗi cú pháp, tất cả các bài kiểm tra sẽ không thành công. Tất nhiên mã từ các tệp bị loại trừ theo mẫu sẽ không được thực thi. imgur.com/z9FlQEZ
Dawid Karabin

@hinok Gắn console.log vào thành phần Băng chuyền của bạn và chạy lại trình chạy thử nghiệm của bạn. Đối với tôi, ngay cả khi tôi sử dụng if.onlyconsole.log từ thành phần Băng chuyền nhiều lần khi có các bài kiểm tra bị bỏ qua / không được bỏ qua cho Thành phần đó trong các mẫu đồng hồ của bạn.
adaam

29

it.onlydescribe.onlychỉ hoạt động đối với mô-đun mà chúng có trong đó. Nếu bạn gặp sự cố khi lọc thử nghiệm trong nhiều tệp, bạn có thể sử dụng jest -t name-of-spec, lọc thử nghiệm khớp với tên đặc điểm (khớp với tên trong mô tả hoặc thử nghiệm).
Nguồn: https://facebook.github.io/jest/docs/en/cli.html

Ví dụ: tôi tập trung vào bài kiểm tra mà tôi hiện đang viết như thế này (với tập lệnh kiểm tra trong package.json):
npm test -- -t "test foo"


4
Điều này vẫn chạy mọi bài kiểm tra đơn lẻ trong trường hợp của tôi và tôi không biết tại sao
Kenny

Lời giải thích duy nhất mà tôi có thể nghĩ đến là bạn đang chuyển đối số chuỗi tồn tại trong mỗi tên thử nghiệm (hoặc describekhối thử nghiệm ). Nếu đúng như vậy, bạn nên thu hẹp tên thử nghiệm chính xác mà bạn muốn tập trung.
rodgobbi

Câu trả lời này có vẻ phù hợp hơn nhiều cho một câu hỏi khác: stackoverflow.com/questions/42827054/…
千 木 郷

8

nó như thế này:

jest sometest.test.js -t "some expression to match a describe or a test"

nó sẽ kiểm tra tất cả các tệp với tên sometest.test.jsvà đối sánh dựa trên tùy chọn -t, nếu bạn chỉ muốn kiểm tra một tệp cụ thể, bạn có thể thực hiện việc này:

jest src/user/.../sometest.test.js

Đối với những người muốn triển khai tùy chọn này trong launch.jsontệp cấu hình VSCode sẽ kích hoạt các thử nghiệm tại một trường hợp thử nghiệm cụ thể: medium.com/better-programming/…
Gus

8

Đối với tôi, nó hoạt động nếu tôi sử dụng 2 tham số như thế này:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

Cờ:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your 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.