Thay đổi thời gian chờ mặc định cho mocha


160

Nếu chúng tôi có tệp kiểm tra đơn vị my-spec.js và chạy với mocha:

mocha my-spec.js

Thời gian chờ mặc định sẽ là 2000 ms. Nó có thể được ghi đè để kiểm tra một phần với tham số dòng lệnh:

mocha my-spec.js --timeout 5000

Có thể thay đổi thời gian chờ mặc định trên toàn cầu cho tất cả các thử nghiệm không? tức là giá trị thời gian chờ mặc định sẽ khác với 2000 ms khi bạn gọi:

mocha my-spec.js

Trang web chính thức của Mocha cũng giải thích thêm về điều này.
RaviRokkam

Câu trả lời:


303

Theo mặc định, Mocha sẽ đọc một tệp có tên test/mocha.optscó thể chứa các đối số dòng lệnh. Vì vậy, bạn có thể tạo một tệp như vậy có chứa:

--timeout 5000

Bất cứ khi nào bạn chạy Mocha tại dòng lệnh, nó sẽ đọc tệp này và đặt thời gian chờ là 5 giây theo mặc định.

Một cách khác có thể tốt hơn tùy thuộc vào tình huống của bạn là đặt nó như thế này trong một describecuộc gọi cấp cao nhất trong tệp thử nghiệm của bạn:

describe("something", function () {
    this.timeout(5000); 

    // tests...
});

Điều này sẽ cho phép bạn chỉ đặt thời gian chờ trên cơ sở mỗi tệp.

Bạn có thể sử dụng cả hai phương pháp nếu bạn muốn mặc định toàn cầu là 5000 nhưng đặt một cái gì đó khác nhau cho một số tệp.


Lưu ý rằng bạn thường không thể sử dụng chức năng mũi tên nếu bạn định gọi this.timeout(hoặc truy cập bất kỳ thành viên nào khác trong thisbộ Mocha đó cho bạn). Ví dụ, điều này thường sẽ không hoạt động :

describe("something", () => {
    this.timeout(5000); //will not work

    // tests...
});

Điều này là do hàm mũi tên lấy thistừ phạm vi mà hàm xuất hiện. Mocha sẽ gọi hàm có giá trị tốt thisnhưng giá trị đó không được truyền vào bên trong hàm mũi tên. Tài liệu cho Mocha nói về chủ đề này :

Việc truyền các chức năng mũi tên (cừu lambdas) cho Mocha không được khuyến khích. Do ràng buộc từ vựng của điều này, các chức năng như vậy không thể truy cập vào bối cảnh Mocha.


1
Cảm ơn thông tin. Nhưng tôi đã cố gắng sửa đổi tệp mocha.opts, nhưng nó không ảnh hưởng.
lm.

2
Bạn đã tạo ra nó ở đúng nơi? Mocha rất cụ thể về nơi nó muốn tập tin này. Nếu bạn chạy Mocha /home/me/src/proj/thì Mocha sẽ tìm kiếm tệp này:/home/me/src/proj/test/mocha.opts
Louis

Cảm ơn rất nhiều . Bây giờ thay đổi ảnh hưởng
lm.

this.timeout (10000); // thời gian chờ mặc định ^ TypeError: this.timeout không phải là một chức năng tại Suite. <nặc danh> (/Users/jeff.l/Document/workspace/unit-tests/mocha-chai_tests/checkoutTest.js:12:10)
Jeff Lowery

6
@JeffLowery Bạn có đang sử dụng chức năng mũi tên không? Các chức năng mũi tên không thiết lập mới this, thường dẫn đến this.timeoutthất bại như bạn thể hiện trong nhận xét của mình.
Louis

62

Chỉ cần thêm vào câu trả lời đúng, bạn có thể đặt thời gian chờ bằng chức năng mũi tên như thế này:

it('Some test', () => {

}).timeout(5000)

7
Câu hỏi là "để thay đổi thời gian chờ mặc định trên toàn cầu cho tất cả các bài kiểm tra". Câu trả lời của bạn chỉ thay đổi một bài kiểm tra. describe('suite', () => {...}).timeout(5000)không hoạt động.
aleung

Như trong câu trả lời trước, giải pháp được đề xuất hiện không hiệu quả. mochajs.org/#timeouts nói để chèn các setTimeouthướng dẫn rõ ràng bên trong các bài kiểm tra.
Marco Faustinelli

cái này hiệu quả với tôi với mocha @ 5 (cho một bài kiểm tra cụ thể)
Fernando Gabrieli

@MarcoFaustinelli Bạn đang hiểu nhầm tài liệu. SetTimeouts không liên quan gì đến Mocha. Họ ở đó để chứng minh những ảnh hưởng của cài đặt thời gian chờ.
oligofren

33

Thêm điều này cho đầy đủ. Nếu bạn (như tôi) sử dụng tập lệnh trong package.jsontệp của mình , chỉ cần thêm --timeouttùy chọn vào mocha:

"scripts": {
  "test": "mocha 'test/**/*.js' --timeout 10000",
  "test-debug": "mocha --debug 'test/**/*.js' --timeout 10000"
},

Sau đó, bạn có thể chạy npm run testđể chạy bộ thử nghiệm của mình với thời gian chờ được đặt thành 10.000 mili giây.


Trong trường hợp bất cứ ai quan tâm, hầu hết các IDE cũng cho phép bạn đưa ra các tùy chọn mocha để thực hiện kiểm tra; ví dụ: đối với WebStorm, bạn có thể nhập cái này (tức là "- timeout 10000") trong Run-> Chỉnh sửa cấu hình-> Tùy chọn Mocha bổ sung.
Rubicon

25

Trong các phiên bản hiện tại của Mocha, thời gian chờ có thể được thay đổi trên toàn cầu như thế này:

mocha.timeout(5000);

Chỉ cần thêm dòng ở trên bất cứ nơi nào trong bộ thử nghiệm của bạn, tốt nhất là ở đầu thông số kỹ thuật của bạn hoặc trong một trình trợ giúp kiểm tra riêng.


Trong các phiên bản cũ hơn và chỉ trong một trình duyệt, bạn có thể thay đổi cấu hình toàn cầu bằng cách sử dụng mocha.setup.

mocha.setup({ timeout: 5000 });

Các tài liệu không bao gồm các thiết lập thời gian chờ trên toàn cầu, nhưng cung cấp một vài ví dụ về cách thay đổi thời gian chờ trong các tình huống phổ biến khác.


5
Điều này không hoạt động trong Node. Xem stackoverflow.com/a/47915119/893113 . Có vẻ như tùy chọn CLI là cách duy nhất.
paulmelnikow

Tôi cũng không làm việc trong trình duyệt. Cho đến hôm nay, tài liệu được liên kết trong câu trả lời không đề cập đến bất kỳ timeouttham số nào . Ngược lại, mochajs.org/#timeouts nói để chèn các setTimeouthướng dẫn rõ ràng bên trong các bài kiểm tra.
Marco Faustinelli

@MarcoFaustinelli Bạn đang hiểu nhầm tài liệu. SetTimeouts không liên quan gì đến Mocha. Họ ở đó để chứng minh những ảnh hưởng của cài đặt thời gian chờ.
oligofren
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.