mattermost-mobile-upstream/jest.config.js
yasser khan 72e74b8785
test(e2e): make CMT and PR E2E green (absorbs #10186) (#10184)
test(e2e): stabilize mobile suites and shared-server configuration

- Restore Android character-limit coverage with realistic word-based payloads.
- Use a time-based grace period for classification-lock transport failures,
  resetting it after each successful request.
- Pin the demo plugin to v0.12.1 and replace mismatched installations using
  the multipart upload force flag.
- Recover uncertain channel creation through read-back, retry transient
  membership and profile-update failures, and check setup results.
- Improve sidebar navigation, channel-info recovery, tooltip dismissal,
  archived-channel assertions, and archived-search retries.
- Verify banner attributes before UI assertions and report observed failures
  without attributing unsupported causes.
- Reduce ChannelAttributes flag changes, retry app reloads, strengthen
  feature-state assertions, and remove unsafe full-config updates.
- Check configuration writability and environment overrides before patching;
  verify the app reflects AllowDownloadLogs and fix Maestro text matching.
- Increase the Jest timeout to accommodate existing test waits.
2026-09-22 12:33:09 +05:30

41 lines
1.7 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
// eslint-disable-next-line no-process-env
process.env.TZ = 'UTC';
module.exports = {
preset: 'jest-expo',
verbose: true,
globals: {
'ts-jest': {
tsConfigFile: 'tsconfig.test.json',
},
},
moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'],
clearMocks: true,
// Jest's 5s default is shorter than the in-test waits these suites already declare
// (a 10s waitFor around a WatermelonDB write can never finish inside it), so a loaded
// CI runner kills the test before its own assertion gets a chance to run.
testTimeout: 30000,
setupFilesAfterEnv: ['<rootDir>/test/setup.ts'],
collectCoverageFrom: ['app/**/*.{js,jsx,ts,tsx}'],
coverageReporters: ['lcov', 'text-summary', 'json-summary'],
testPathIgnorePatterns: ['/node_modules/', '/detox/'],
coveragePathIgnorePatterns: ['/node_modules/', '/components/', '/screens/', '/routes/'],
transformIgnorePatterns: [
'node_modules/(?!' +
'(@react-native|react-native)|' +
'expo(?:-[^/]+)?|@expo|expo-modules-core|uuid|' +
'@sentry/react-native|' +
'react-intl|@formatjs/[^/]+|intl-messageformat|@messageformat/[^/]+|' +
'validator|' +
'hast-util-from-selector|hastscript|property-information|hast-util-parse-selector|space-separated-tokens|comma-separated-tokens|zwitch|' +
'@mattermost/calls|@mattermost/rnutils|@mattermost/hardware-keyboard|@mattermost/rnshare|@mattermost/secure-pdf-viewer|@mattermost/compass-icons|' +
'@rneui/base|' +
'@shopify/flash-list|' +
'ratex-react-native)',
],
};