Bagaimana cara mengubah waktu tunggu pada spesifikasi asinkron simpul melati

90

Bagaimana saya bisa membuat tes ini lulus tanpa menggunakan blok run / waitsFor?

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

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

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

         done();
     });
});
Brian Low
sumber

Jawaban:

105

Anda dapat (sekarang) mengaturnya langsung di spesifikasi, sesuai dokumen 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;
    });
});
Francisco
sumber
Ya, mengubah jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;nilai melakukan trik bagi saya pada penyiapan baru yang dibuat dari awal menggunakan Jasmine + Jest. Ini bekerja seperti yang diharapkan.
Ignacio Segura
Saya setuju @willydee, memiliki masalah pengujian runnig dengan cloudinary dan cuplikan kecil ini membantu saya.
Dev Yego
1
Perlu dicatat mungkin bahwa ini harus terjadi sebelum it. Pada saat Anda sedang dalam ujian, donesepertinya sudah terpikat pada apa pun DEFAULT_TIMEOUT_INTERVALyang sebelumnya itdimulai.
ruffin
79

Mengirim pull request untuk fitur ini ( 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
Brian Low
sumber
43

Untuk menyetel waktu tunggu Jasmine-Node global, lakukan ini:

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

Penghargaan untuk pengembang Gabe Hicks untuk mengetahui bagian .getEnv () melalui debugging meskipun terdapat informasi yang salah dalam dokumen README yang mengklaim bahwa hal itu dilakukan dengan menyetel jasmine.DEFAULT_TIMEOUT_INTERVAL.

Jika Anda ingin menyetel waktu tunggu khusus hanya untuk satu it (), Anda dapat mencoba meneruskan batas waktu (milidetik) sebagai argumen ketiga (setelah pernyataan string dan fungsinya). Ada contoh yang dilakukan di sini , tetapi saya tidak yakin apa yang akan terjadi jika batas waktu khusus lebih lama daripada default Jasmine. Saya berharap itu akan gagal.

Colin May
sumber
28
Pembaruan untuk siapa pun yang tersandung pada jawaban ini pada tahun 2014: Untuk pengaturan Jasmine 2, jasmine.DEFAULT_TIMEOUT_INTERVAL berfungsi.
Simon Groenewolt
2
Ini berfungsi untuk saya pada pengaturan baru menggunakan Jest + Jasmine. Saya baru saja menambahkan jasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;file konfigurasi global yang saya gunakan untuk semua pengujian dan berfungsi seperti yang diharapkan.
Ignacio Segura
23

Sepertinya Anda sekarang dapat menambahkannya sebagai argumen terakhir untuk itfungsi tersebut:

describe('my test', function(){
    it('works', function(done){
        somethingAsync().then(done);
    }, 10000); // changes to 10 seconds
});
d -_- b
sumber
11

Di Angular, letakkan ini di luar blok deskripsi Anda:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Ini berlaku untuk semua pengujian dalam file .spec.ts

danday74
sumber
3

Letakkan setelah describepernyataan:

describe("A saves to DB", function() {
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
Michał Kuliński
sumber
2

Menambahkan: jasmine.DEFAULT_TIMEOUT_INTERVAL = yourTime;pada file pembantu bekerja untuk saya.

Ivan Rangel
sumber
1

Mengapa tidak dengan memata-matai setTimeout()?

Sesuatu seperti:

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

setTimeOut(function () { ... }, 2500);
expect(spy).toHaveBeenCalled();
ggozad.dll
sumber
1
Terima kasih. Ini adalah pengujian integrasi, node.js memanggil ke layanan eksternal yang seringkali lambat.
Brian Low
ini brilian, memungkinkan untuk menguji batas waktu tanpa membuat pengujian menunggu waktu tunggu yang sebenarnya
Guillaume
dengan cara ini kami tidak melatih berlalunya waktu, dan langsung memanggil fn, sedangkan aslinya tidak pernah memanggilnya sebelum siklus berikutnya.
André Werlang
0

Dalam kasus saya, saya memiliki beberapa kasus pengujian dan ketika saya menggunakan solusi yang disebutkan di atas dengan menggunakan:

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

DEFAULT_TIMEOUT_INTERVAL tidak diperbarui pada kasus uji pertama, jadi saya harus menambahkan ini:

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

ke kode saya agar berhasil menjalankan semua tes.

Andreas Foteas
sumber
-17

Ubah j $ .DEFAULT_TIMEOUT_INTERVAL menjadi 10000 di file berikut: npm \ node_modules \ jasmine-core \ lib \ jasmine-core

sharaj rewoo
sumber
Tidak berhasil untuk skenario di mana pustaka diinstal setiap kali pengujian dijalankan. Contoh: - menjalankan CI di Cloud.
domino_katrino