ฉันจะเปลี่ยนระยะหมดเวลาของข้อมูลจำเพาะ async ของโหนดจัสมินได้อย่างไร


92

ฉันจะให้การทดสอบนี้ผ่านโดยไม่หันไปวิ่ง / รอบล็อกได้อย่างไร

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

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

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

         done();
     });
});

คำตอบ:


107

คุณสามารถ (ตอนนี้) ตั้งค่าโดยตรงในสเปคตามเอกสารจัสมิน

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

ใช่การเปลี่ยนjasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;ค่าเป็นเคล็ดลับสำหรับฉันในการตั้งค่าใหม่ล่าสุดที่สร้างขึ้นตั้งแต่เริ่มต้นโดยใช้ Jasmine + Jest มันทำงานได้ตามที่คาดไว้
Ignacio Segura

ฉันเห็นด้วย @willydee มีปัญหาในการทดสอบ runnig กับ cloudinary และตัวอย่างเล็ก ๆ น้อย ๆ นี้มาช่วยฉัน
Dev Yego

1
itบางทีอาจจะเป็นที่น่าสังเกตว่านี้จะเกิดขึ้นก่อน ในตอนที่คุณอยู่ในการทดสอบdoneดูเหมือนว่าคุณจะติดอยู่กับสิ่งที่DEFAULT_TIMEOUT_INTERVALเกิดitขึ้นก่อนที่จะเริ่ม
ruffin


43

ในการตั้งค่าระยะหมดเวลาของ Jasmine-Node ส่วนกลางให้ดำเนินการดังนี้:

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

ให้เครดิตกับผู้พัฒนา Gabe Hicks สำหรับการหาส่วน. getEnv () ผ่านการดีบักแม้ว่าจะมีข้อมูลที่ผิดในเอกสาร READMEซึ่งอ้างว่าทำได้โดยการตั้งค่าจัสมิน DEFAULT_TIMEOUT_INTERVAL

หากคุณต้องการตั้งค่าการหมดเวลาแบบกำหนดเองเพียงครั้งเดียว () คุณสามารถลองส่งผ่านการหมดเวลา (มิลลิวินาที) เป็นอาร์กิวเมนต์ที่สาม (หลังคำสั่งสตริงและฟังก์ชัน) มีตัวอย่างของการดำเนินการที่นี่แต่ฉันไม่แน่ใจว่าจะเกิดอะไรขึ้นหากการหมดเวลาที่กำหนดเองนานกว่าค่าเริ่มต้นของจัสมิน ฉันคาดว่ามันจะล้มเหลว


29
อัปเดตสำหรับใครก็ตามที่สะดุดกับคำตอบนี้ในปี 2014: สำหรับดอกมะลิ 2 การตั้งค่าจัสมินทำงานได้ดีEFAULT_TIMEOUT_INTERVAL
Simon Groenewolt

2
มันใช้ได้กับฉันในการตั้งค่าใหม่ล่าสุดโดยใช้ Jest + Jasmine ฉันเพิ่งเพิ่มjasmine.DEFAULT_TIMEOUT_INTERVAL = 12000;ไฟล์กำหนดค่าส่วนกลางที่ฉันใช้สำหรับการทดสอบทั้งหมดและทำงานได้ตามที่คาดไว้
Ignacio Segura

23

ดูเหมือนว่าคุณสามารถเพิ่มเป็นอาร์กิวเมนต์สุดท้ายของitฟังก์ชันได้แล้ว:

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

13

ใน Angular วางสิ่งนี้ไว้นอกบล็อกคำอธิบายของคุณ:

jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;

สิ่งนี้ใช้กับการทดสอบทั้งหมดในไฟล์. spec.ts




1

ทำไมไม่สอดแนมsetTimeout()?

สิ่งที่ต้องการ:

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

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

1
ขอบคุณ. นี่คือการทดสอบการรวม node.js กำลังเรียกใช้บริการภายนอกซึ่งมักจะช้า
Brian Low

สิ่งนี้ยอดเยี่ยมทำให้สามารถทดสอบการหมดเวลาได้โดยไม่ต้องทำการทดสอบรอให้หมดเวลาจริง
Guillaume

ในรูปแบบนี้เราจะไม่ใช้เวลาที่ผ่านไปและเรียก fn ทันทีในขณะที่ต้นฉบับไม่เคยเรียกก่อนรอบถัดไป
André Werlang

0

ในกรณีของฉันฉันมีการทดสอบหลายกรณีและในขณะที่ฉันใช้วิธีแก้ปัญหาข้างต้นโดยใช้:

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

DEFAULT_TIMEOUT_INTERVAL ไม่ได้รับการอัปเดตในกรณีทดสอบแรกดังนั้นฉันจึงต้องเพิ่มสิ่งนี้:

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

ไปยังรหัสของฉันเพื่อเรียกใช้การทดสอบทั้งหมดได้สำเร็จ


0

ในการดำเนินการนี้ทั่วโลกสำหรับการทดสอบทั้งหมดของคุณ (ในกรณีของ e2e หรือการทดสอบการรวม) คุณสามารถใช้ตัวช่วยได้

ไฟล์ตัวช่วยเมื่อกำหนดค่าอย่างถูกต้องควรโหลดก่อนที่จะดำเนินการทดสอบและอนุญาตให้คุณเปลี่ยน DEFAULT_TIMEOUT_INTERVAL ได้ทั่วโลก:

spec / support / jasmine.json

{
    ...
    "helpers": [
        "/path/to/helpers/**/*.ts"
    ]
}

ผู้ช่วย / timeout.ts

jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000;

-18

เปลี่ยน j $ .DEFAULT_TIMEOUT_INTERVAL เป็น 10000 ในไฟล์ต่อไปนี้: npm \ node_modules \ jasmine-core \ lib \ jasmine-core


ไม่เกิดผลสำหรับสถานการณ์ที่มีการติดตั้งไลบรารีทุกครั้งที่เรียกใช้การทดสอบ เช่น - เรียกใช้ CI บนคลาวด์
domino_katrino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.