Làm cách nào để thay đổi thời gian chờ trên thông số không đồng bộ của jasmine-node


90

Làm cách nào tôi có thể vượt qua bài kiểm tra này mà không cần dùng đến các lần chạy / chờ

it("cannot change timeout", function(done) {

     request("http://localhost:3000/hello", function(error, response, body){

         expect(body).toEqual("hello world");

         done();
     });
});

Câu trả lời:


105

Bạn có thể (bây giờ) đặt nó trực tiếp trong thông số kỹ thuật, theo tài liệu của Jasmine .

describe("long asynchronous specs", function() {

    var originalTimeout;

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

    it("takes a long time", function(done) {
        setTimeout(function() {
            done();
        }, 9000);
    });

    afterEach(function() {
        jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
});

Vâng, việc thay đổi jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;giá trị đã là một mẹo nhỏ đối với tôi trên một thiết lập hoàn toàn mới được xây dựng từ đầu bằng cách sử dụng Jasmine + Jest. Nó hoạt động như mong đợi.
Ignacio Segura

Tôi đồng ý @willydee, đã gặp sự cố khi kiểm tra kỹ thuật số với đám mây và đoạn mã nhỏ này đã giúp tôi giải cứu.
Dev Yego

1
Đáng chú ý có lẽ rằng điều này phải xảy ra trước khi it. Vào thời điểm bạn đang trong bài kiểm tra, donedường như bạn đã mắc vào bất cứ thứ gì DEFAULT_TIMEOUT_INTERVALtrước khi itbắt đầu.
ruffin

79

Đã gửi yêu cầu kéo cho tính năng này ( https://github.com/mhevery/jasmine-node/pull/142 )

it("cannot change timeout", function(done) {

  request("http://localhost:3000/hello", function(error, response, body){

     expect(body).toEqual("hello world");

     done();
  });

}, 5000); // set timeout to 5 seconds

43

Để đặt thời gian chờ chung của Jasmine-Node, hãy làm như sau:

jasmine.getEnv().defaultTimeoutInterval = timeoutYouWouldPrefer;// e.g. 15000 milliseconds

Ghi công cho nhà phát triển Gabe Hicks vì đã tìm ra phần .getEnv () thông qua gỡ lỗi mặc dù có thông tin sai lệch trong tài liệu README, tài liệu này tuyên bố nó được thực hiện bằng cách đặt jasmine.DEFAULT_TIMEOUT_INTERVAL.

Nếu bạn muốn đặt thời gian chờ tùy chỉnh chỉ cho một it (), bạn có thể thử chuyển thời gian chờ (mili giây) làm đối số thứ ba (sau câu lệnh chuỗi và hàm). Có một ví dụ về điều đó đang được thực hiện ở đây , nhưng tôi không chắc điều gì sẽ xảy ra nếu thời gian chờ tùy chỉnh lâu hơn mặc định của Jasmine. Tôi hy vọng nó sẽ thất bại.


28
Cập nhật cho bất kỳ ai vấp phải câu trả lời này vào năm 2014: Đối với Jasmine 2, thiết lập jasmine.DEFAULT_TIMEOUT_INTERVAL hoạt động.
Simon Groenewolt

2
Nó hoạt động với tôi trên một thiết lập hoàn toàn mới sử dụng Jest + Jasmine. Tôi vừa thêm jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;vào tệp cấu hình chung mà tôi sử dụng cho tất cả các thử nghiệm và nó hoạt động như mong đợi.
Ignacio Segura

23

Có vẻ như bây giờ bạn có thể thêm nó làm đối số cuối cùng cho ithàm:

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});

11

Trong Angular, hãy đặt cái này bên ngoài khối mô tả của bạn:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Điều này áp dụng cho tất cả các bài kiểm tra trong tệp .spec.ts


3

Đặt nó sau describecâu lệnh:

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

2

Thêm: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;trên một tệp trợ giúp đã làm việc cho tôi.


1

Tại sao không bằng cách theo dõi setTimeout()?

Cái gì đó như:

var spy = spyOn(window, 'setTimeout').andCallFake(function (func, timeout) {
    expect(timeout).toEqual(2500);
    func();
});

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();

1
Cảm ơn. Đây là các thử nghiệm tích hợp, node.js đang gọi một dịch vụ bên ngoài thường chậm.
Brian Low,

đây là rực rỡ, nó làm cho nó có thể để kiểm tra thời gian chờ mà không làm chờ đợi thử nghiệm cho thời gian chờ thực tế
Guillaume

theo kiểu này, chúng ta không thực hiện thời gian trôi qua và gọi fn ngay lập tức, trong khi ban đầu không bao giờ gọi nó trước chu kỳ tiếp theo.
André Werlang,

0

Trong trường hợp của tôi, tôi đã có nhiều trường hợp kiểm tra và trong khi tôi đang sử dụng giải pháp nói trên, đã sử dụng:

    beforeEach(function() {
        originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });

DEFAULT_TIMEOUT_INTERVAL không được cập nhật trong trường hợp thử nghiệm đầu tiên, vì vậy tôi phải thêm cái này:

  beforeAll(() => {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
  })

mã của tôi để chạy thành công tất cả các bài kiểm tra.


-17

Thay đổi j $ .DEFAULT_TIMEOUT_INTERVAL thành 10000 trong tệp sau: npm \ node_modules \ jasmine-core \ lib \ jasmine-core


Không hiệu quả đối với các tình huống mà thư viện được cài đặt mỗi khi chạy thử nghiệm. Ví dụ: - chạy CI trên Cloud.
domino_katrino
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.