javascript - Async कॉलबैक jest.setTimeout द्वारा निर्दिष्ट 5000ms के समय के भीतर लागू नहीं किया गया था




automated-tests jestjs (6)

इसलिए आपके द्वारा यहां निर्दिष्ट समय-सीमा को डिफ़ॉल्ट टाइमआउट से कम होना चाहिए।

डिफ़ॉल्ट टाइमआउट 5000 और डिफ़ॉल्ट रूप से फ्रेम jest मामले में jasmine है। आप परीक्षण के अंदर टाइमआउट को जोड़कर निर्दिष्ट कर सकते हैं

jest.setTimeout(30000);

लेकिन यह परीक्षण के लिए विशिष्ट होगा। या आप फ्रेमवर्क के लिए कॉन्फिग फाइल को सेटअप कर सकते हैं।

https://facebook.github.io/jest/docs/en/configuration.html#setuptestframeworkscriptfile-string

// jest.config.js
module.exports = {
  setupTestFrameworkScriptFile: './jest.setup.js'
}

// jest.setup.js
jest.setTimeout(30000)

इस धागे को भी देखें

https://github.com/facebook/jest/issues/5055

https://github.com/facebook/jest/issues/652

मैं कुछ सामने के अंत परीक्षणों को चलाने के लिए कठपुतली और कीट का उपयोग कर रहा हूं।

मेरे परीक्षण इस प्रकार हैं:

describe("Profile Tab Exists and Clickable: /settings/user", () => {
    test(`Assert that you can click the profile tab`, async () => {
      await page.waitForSelector(PROFILE.TAB);
      await page.click(PROFILE.TAB);
    }, 30000);
});

कभी-कभी, जब मैं परीक्षण चलाता हूं, तो सब कुछ अपेक्षित रूप से काम करता है। अन्य बार, मुझे एक त्रुटि मिलती है:

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

      at node_modules/jest-jasmine2/build/queue_runner.js:68:21
      at Timeout.callback [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:633:19)

यह अजीब है क्योंकि:

  1. मैंने टाइमआउट को 30000 बताया

  2. मुझे यह त्रुटि मिलती है या नहीं, यह बहुत ही यादृच्छिक रूप से प्रतीत होता है

क्या कोई अनुमान लगा सकता है कि ऐसा क्यों हो रहा है?


जेस्ट के विकसित होने के साथ ही इस सवाल का जवाब बदल गया है। वर्तमान उत्तर (मार्च 2019):

  1. आप इसमें किसी तीसरे पैरामीटर को जोड़कर किसी भी व्यक्तिगत परीक्षा के समय से आगे निकल सकते हैं। अर्थात। it('runs slow', () => {...}, 9999)

  2. आप jest.setTimeout का उपयोग करके डिफ़ॉल्ट बदल सकते हैं। यह करने के लिए:

 // config
   "setupFilesAfterEnv": [  // NOT setupFiles
     "./src/jest/defaultTimeout.js"
   ],

तथा

// File: src/jest/defaultTimeout.js
/* global jest */
jest.setTimeout(1000)
  1. जैसे दूसरों ने नोट किया है, और सीधे तौर पर इससे संबंधित नहीं है, done कि यह async / प्रतीक्षा के दृष्टिकोण के साथ आवश्यक नहीं है।

मैं जोड़ना चाहूंगा (यह एक टिप्पणी के लिए थोड़ा लंबा है) कि 3000 समयावधि के साथ भी मेरे परीक्षण अभी भी कभी-कभी (यादृच्छिक रूप से विफल) होंगे

Timeout - Async callback was not invoked within the 5000ms timeout specified by jest.setTimeout.

@ तरुण के शानदार जवाब के लिए, मुझे लगता है कि बहुत सारे परीक्षण तय करने का सबसे छोटा तरीका है:

describe('puppeteer tests', () => {
  beforeEach(() => {
    jest.setTimeout(10000);
  });

  test('best jest test fest', async () => {
    // blah
  });
});

मैं हाल ही में इस मुद्दे पर एक अलग कारण से भाग गया: मैं jest -i का उपयोग करके कुछ परीक्षणों को सिंक्रोनाइज़ कर रहा था, और यह सिर्फ टाइमआउट होगा। जो भी तर्क के लिए, jest --runInBand (भले ही -i एक उपनाम होने का मतलब है) का उपयोग करके एक ही परीक्षण चलाने से समय नहीं निकलता है।

शायद इससे किसी को ¯\_(:/)_/¯ मदद मिलेगी


यहां मेरा समाधान: लेकिन मुझे नहीं पता कि यह आपकी कोड स्थिति से मेल खाता है या नहीं, लेकिन आप इसे आज़मा सकते हैं।

it('GET should return a status of 200 OK', async (done) => {
  await frisby
    .get('api-url')
    .expect('status', 200)
    .done(done)
});

done(); सुनिश्चित करने के लिए सुनिश्चित करें done(); कॉलबैक पर या यह केवल परीक्षा पास नहीं करेगा।

beforeAll((done /* call it or remove it*/) => {
  done(); // calling it
});

अन्य सभी कार्यों पर लागू होता है जिनमें एक काम किया है () कॉलबैक।





puppeteer