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();
     });
});

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;
    });
});

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


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.


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
});

11

Di Angular, letakkan ini di luar blok deskripsi Anda:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

Ini berlaku untuk semua pengujian dalam file .spec.ts


3

Letakkan setelah describepernyataan:

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

2

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


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();

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.


-17

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


Tidak berhasil untuk skenario di mana pustaka diinstal setiap kali pengujian dijalankan. Contoh: - menjalankan CI di Cloud.
domino_katrino
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.