परीक्षण के एक समारोह है जो एक वादा और setTimeout, क्यों है यह समय है?

0

सवाल

मैं कोशिश कर रहा हूँ का परीक्षण करने के लिए एक समारोह है कि setTimeout एक वादा है । हालांकि यह रहता है समय ।

इस समारोह है:

export const sleep = async (duration: number): Promise<void> => {
  await new Promise<void>((resolve) => {
    setTimeout(resolve, duration);
  });

  if (process.env.NODE_ENV === "test") {
    console.log("sleep end");
  }
};

और यह मेरे परीक्षण:

import { sleep } from "../../helpers/utils";

console.log = jest.fn();
jest.useFakeTimers();

test("calls sleep with correct argument and calls console.log", async () => {
  const NODE_ENV = "test";
  const SLEEP_DURATION = "100";

  process.env = { ...process.env, NODE_ENV, SLEEP_DURATION };

  const timeoutSpy = jest.spyOn(global, "setTimeout");

  await sleep(+SLEEP_DURATION);

  jest.runAllTimers();

  expect(sleep).toHaveBeenCalledWith(+SLEEP_DURATION);
  expect(timeoutSpy).toHaveBeenCalledWith(+SLEEP_DURATION);
  expect(console.log).toHaveBeenCalledWith("sleep end");
});

समस्या यह है कि जब मैं कोशिश इस चलाने के लिए परीक्षण विफल रहता है और यह संदेश देता है:

thrown: "Exceeded timeout of 5000 ms for a test.
    Use jest.setTimeout(newTimeout) to increase the timeout value, if this is a long-running test."

मैंने कोशिश की है jest.setTimeout(10000) जो सिर्फ एक त्रुटि फेंकता के Exceeded timeout of 10000ms ...

किसी भी विचार के रूप में करने के लिए क्यों हो रहा है? या कैसे इसे ठीक करने के लिए?

धन्यवाद!

javascript jestjs settimeout timeout
2021-11-24 01:41:50
1

सबसे अच्छा जवाब

1

यहाँ एक समाधान है कि के करीब हो जाता है के लिए क्या आप के लिए जा रहे हैं. महत्वपूर्ण बात है, तुम नहीं कर सकते await संकल्प का वादा का उपयोग कर नकली टाइमर या यह कभी नहीं होगा हल. इसके बजाय, आप कॉल कर सकते हैं आवंटित की वापसी मूल्य sleep समारोह के लिए एक चर है, तो चलाने के लिए टाइमर है, तो इंतजार चर.

मैं भी समायोजित अपने expect बयान के लिए मध्यांतर जासूस के बाद से यह दो तर्क लेता है. अंत में, मैं हटा दिया है अपने expectationt है कि sleep हो जाता है के साथ कहा जाता है की अवधि है, क्योंकि तुम सचमुच कर रही है कि परीक्षण में है, तो यह प्रतीत नहीं होता सार्थक बनाने के लिए है कि जोर दिया.

console.log = jest.fn();
jest.useFakeTimers();

test("calls sleep with correct argument and calls console.log", async () => {
  const NODE_ENV = "test";
  const SLEEP_DURATION = "100";

  process.env = { ...process.env, NODE_ENV, SLEEP_DURATION };

  const timeoutSpy = jest.spyOn(global, "setTimeout");

  const sleepFn = sleep(+SLEEP_DURATION);

  jest.runAllTimers();

  // Now that we ran timers we can await the promise resolving 
  await sleepFn;

  // timeout takes two arguments
  expect(timeoutSpy).toHaveBeenCalledWith(
    expect.any(Function),
    +SLEEP_DURATION
  );
  expect(console.log).toHaveBeenCalledWith("sleep end");
});
2021-11-24 02:03:50

धन्यवाद के लिए अपने जानकारीपूर्ण जवाब है, यह मेरा पहली बार का उपयोग कर इन ठठ्ठा टाइमर तो मैं निश्चित रूप से कुछ का अध्ययन करने के लिए करते हैं!
ffx292

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में