Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix native test timeouts caused by combining fake timers and setImmediate #37715

Merged
merged 43 commits into from
Jan 11, 2022

Commits on Jan 4, 2022

  1. Configuration menu
    Copy the full SHA
    2d3b799 View commit details
    Browse the repository at this point in the history
  2. Clean up fake timer usage after tests

    This may be unnecessary, but avoid potential issues where fake timers
    are unexpectedly used and cause breakages in other tests.
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    f7761f7 View commit details
    Browse the repository at this point in the history
  3. Enable combination of modern fake timers and waitFor

    Previously, `waitFor` would timeout when `jest.useFakeTimers('modern')`
    was enabled. The 'modern' version is now the default in Jest 27.
    
    The Jest preset from `@testing-library/react-native` provides a
    workaround for a larger issue in React Native and Jest that mutates the
    global `Promise` object. https://git.io/JSDZI
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    07f062d View commit details
    Browse the repository at this point in the history
  4. Remove global enabling of fake timers

    Enabling fake timers can have negative consequences with `waitFor`, e.g.
    causing unexpected timeouts. Enabling it globally is far-reaching and
    this should likely be enabled within individual tests as needed.
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    7a1d441 View commit details
    Browse the repository at this point in the history
  5. Replace jest-jasmine2 with jest-circus

    The latter is considered the successor to the former. We seemingly do
    not depend on anything explicitly provided by `jest-jasmine2` and should
    likely move on from it.
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    7ec7e40 View commit details
    Browse the repository at this point in the history
  6. Switch testing environment from jsdom to node

    Improves speed of test environment setup and fixes a timeout issue when
    combining `waitFor` and `jest.useFakeTimers('modern')`. It is not yet
    exactly pinpointed as to _why_ this fixes the timeout issue. It appears
    to related to `setImmediate` and `setTimeout`.
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    8254598 View commit details
    Browse the repository at this point in the history
  7. Remove setImmediate global for testing environment

    This may be unnecessary if `testEnvironment: 'node'` is retained.
    However, most tests are currently broken due to missing DOM APIs.
    dcalhoun committed Jan 4, 2022
    Configuration menu
    Copy the full SHA
    e35a976 View commit details
    Browse the repository at this point in the history

Commits on Jan 5, 2022

  1. Polyfill required DOM APIs for testing environment

    Now that `testEnvironment: 'node'` is utilized for the testing
    environment, we must mirror the app runtime and polyfill the necessary
    DOM APIs used in the source.
    
    The Enzyme configuration removed conflicts with the switch from
    `testEnvironment: 'jsdom'` to `testEnvironment: 'node'`. Enzyme depends
    upon `react-dom`, which introduces far more dependencies upon DOM APIs.
    Currently, all Enzyme-related tests fail and need to be replaced with
    `@testing-library/react-native`.
    dcalhoun committed Jan 5, 2022
    Configuration menu
    Copy the full SHA
    637090a View commit details
    Browse the repository at this point in the history
  2. Avoid import of react-dom within native file

    Importing `react-dom` introduces additional dependencies upon the DOM
    API and is incompatible with `testEnvironment: 'node'`. The `act`
    utility is available from `@testing-library/react-native`.
    dcalhoun committed Jan 5, 2022
    Configuration menu
    Copy the full SHA
    315e5cb View commit details
    Browse the repository at this point in the history
  3. Explicitly toggle fake timers in tests

    This may not be necessary, but may help avoid unexpected issues from
    lingering fake timers, e.g. timeout errors while using `waitFor`.
    dcalhoun committed Jan 5, 2022
    Configuration menu
    Copy the full SHA
    380476f View commit details
    Browse the repository at this point in the history
  4. Reinstate legacy Jest timers

    The Jest preset from `@testing-library/react-native` that fixed support
    for "modern" timers by modifying the polyfilled the global `Promise`
    resulted in new failures from within React Native itself. Specifically,
    core React Native components rely upon `.done` from the `promise`
    package. `.done` is a non-standard method that does not exist on the
    global `Promise` used by `@testing-library/react-native`'s preset.
    dcalhoun committed Jan 5, 2022
    Configuration menu
    Copy the full SHA
    bba6d91 View commit details
    Browse the repository at this point in the history

Commits on Jan 6, 2022

  1. Disable erroneously failing test

    This previously passing test now fails after upgrading
    `@testing-library/react-native` due to changes in the library. Setting
    `pointerEvent` to "box-none" or "none" currently erroneously prevents
    triggering other events unrelated to pressing on the element, e.g.
    `onTouch*`, `onLayout`.
    
    https://git.io/JSHZt
    dcalhoun committed Jan 6, 2022
    Configuration menu
    Copy the full SHA
    fafa79e View commit details
    Browse the repository at this point in the history
  2. Reinstate jest-jasmine2 to support done callback

    The Jest team create jest-circus as the predecessor for jest-jasmine2.
    The former does not support the `done` callback with async/await, and
    would appear to have no plans to do so.
    
    It would likely benefit us to refactor the one current test using
    `done` away from it, and embrace `jest-circus` to maintain alignment
    with Jest core.
    dcalhoun committed Jan 6, 2022
    Configuration menu
    Copy the full SHA
    0b3ea9a View commit details
    Browse the repository at this point in the history
  3. Refactor native unit tests away from done callback

    The Jest team created `jest-circus` as the predecessor for
    `jest-jasmine2`. The former does not support the `done` callback with
    async/await, and would appear to have no plans to do so.
    
    In order to embrace `jest-circus` and maintain alignment with Jest core,
    the one test using `done` was refactored to avoid it
    
    - https://git.io/JSHWU
    - https://git.io/JSHWk
    dcalhoun committed Jan 6, 2022
    Configuration menu
    Copy the full SHA
    95df56c View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    ad43d2a View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    61da998 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    36c4d84 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    3b1acec View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    a5025ef View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    d0c6729 View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    02c0189 View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    b8be92f View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    1c8db5f View commit details
    Browse the repository at this point in the history
  13. Configuration menu
    Copy the full SHA
    19aa31b View commit details
    Browse the repository at this point in the history
  14. Configuration menu
    Copy the full SHA
    3e3f9a7 View commit details
    Browse the repository at this point in the history

Commits on Jan 7, 2022

  1. Configuration menu
    Copy the full SHA
    f9cd64e View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    6a6959d View commit details
    Browse the repository at this point in the history
  3. Fix ReferencEerror in Inserter test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    d6064e7 View commit details
    Browse the repository at this point in the history
  4. Fix ReferencEerror in Verse test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    2a2616a View commit details
    Browse the repository at this point in the history
  5. Fix ReferencEerror in Audio test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    3690805 View commit details
    Browse the repository at this point in the history
  6. Fix ReferencEerror in File test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    f3f4c2c View commit details
    Browse the repository at this point in the history
  7. Fix ReferencEerror in Search test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    ceecec8 View commit details
    Browse the repository at this point in the history
  8. Fix ReferencEerror in Missing test

    Usage of `react-test-renderer` caused the following error. Leveraging
    `@testing-library/react-native` instead resolved it for an unknown
    reason.
    
    ```
    ReferenceError: You are trying to `import` a file after the Jest environment has been torn down. From packages/block-editor/src/components/inserter/test/index.native.js.
    
          468 |                     style: listStyle,
          469 |                     safeAreaBottomInset,
        > 470 |                     scrollEnabled,
              |                                             ^
          471 |                     automaticallyAdjustContentInsets: false,
          472 |             };
          473 |
    
          at Object.get PanResponder [as PanResponder] (node_modules/react-native/index.js:251:12)
          at BottomSheet.render (packages/components/src/mobile/bottom-sheet/index.native.js:470:39)
          at finishClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8459:31)
          at updateClassComponent (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:8409:24)
          at beginWork (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:9990:16)
    ```
    dcalhoun committed Jan 7, 2022
    Configuration menu
    Copy the full SHA
    61a6520 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    4879647 View commit details
    Browse the repository at this point in the history

Commits on Jan 10, 2022

  1. Add assertions to block type tab tests

    Improve test clarity with explicit expect assertions.
    
    Co-authored-by: Carlos Garcia <fluiddot@gmail.com>
    dcalhoun and fluiddot committed Jan 10, 2022
    Configuration menu
    Copy the full SHA
    e065921 View commit details
    Browse the repository at this point in the history

Commits on Jan 11, 2022

  1. Remove unnecessary abstraction

    The switch away from Enzyme reduced this abstraction to a single line,
    so it provides less value now.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    ddaac71 View commit details
    Browse the repository at this point in the history
  2. Consistently assert media block update progress spinner removal

    This increases consistency amongst the tests, as most already include
    this assertion.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    6e17911 View commit details
    Browse the repository at this point in the history
  3. Update MediaUpload test to select 'Choose from device' option

    This selection better aligns with the test description.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    3d817f4 View commit details
    Browse the repository at this point in the history
  4. Remove duplicative matchMedia global definition

    The test environment now imports the globals setup file used by the app
    runtime. That file includes a `matchMedia` global definition as well.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    bbe9288 View commit details
    Browse the repository at this point in the history
  5. Add assertions to LinkSettings tests

    Improve test clarity with explicit expect assertions.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    e703034 View commit details
    Browse the repository at this point in the history
  6. Removed shallow renderer usage in tests

    Shallow rendering components is generally considered a non-optimal
    approach to testing React components by the React community. This
    replaces `shallow` with `render` to further test integration of the
    subject components.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    a0cb863 View commit details
    Browse the repository at this point in the history
  7. Remove unused import

    The `React` import was utilized by the now removed `shallow` render
    implementation.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    0abecf0 View commit details
    Browse the repository at this point in the history
  8. Remove unnecessary top-level beforeAll usage

    Jest runs each test file independently, so top-level code will not
    impact other test files. Since the `(before|after)All` usage in code
    changed is all top-level, and not within a `describe`, it is
    superfluous.
    dcalhoun committed Jan 11, 2022
    Configuration menu
    Copy the full SHA
    1d325ef View commit details
    Browse the repository at this point in the history