preset: 'ts-jest',
globals: {
__DEV__: true,
+ __TEST__: true,
__VERSION__: lernaJson.version,
__BROWSER__: false,
- __JSDOM__: true,
__RUNTIME_COMPILE__: true,
__FEATURE_OPTIONS__: true,
__FEATURE_SUSPENSE__: true
// Global compile-time constants
declare var __DEV__: boolean
-declare var __JSDOM__: boolean
+declare var __TEST__: boolean
declare var __BROWSER__: boolean
declare var __RUNTIME_COMPILE__: boolean
declare var __COMMIT__: string
mockWarn,
createComponent
} from '@vue/runtime-test'
+import { setErrorRecovery } from '../src/errorHandling'
describe('error handling', () => {
mockWarn()
+ beforeEach(() => {
+ setErrorRecovery(true)
+ })
+
+ afterEach(() => {
+ setErrorRecovery(false)
+ })
+
test('propagation', () => {
const err = new Error('foo')
const fn = jest.fn()
})
it('should warn unhandled', () => {
- // temporarily simulate non-test env
- process.env.NODE_ENV = 'dev'
-
const onError = jest.spyOn(console, 'error')
onError.mockImplementation(() => {})
const groupCollapsed = jest.spyOn(console, 'groupCollapsed')
onError.mockRestore()
groupCollapsed.mockRestore()
log.mockRestore()
- process.env.NODE_ENV = 'test'
})
// native event handler handling should be tested in respective renderers
logError(err, type, contextVNode)
}
+// Test-only toggle for testing the uhandled warning behavior
+let forceRecover = false
+export function setErrorRecovery(value: boolean) {
+ forceRecover = value
+}
+
function logError(err: Error, type: ErrorTypes, contextVNode: VNode | null) {
// default behavior is crash in prod & test, recover in dev.
- if (
- __DEV__ &&
- !(typeof process !== 'undefined' && process.env.NODE_ENV === 'test')
- ) {
+ if (__DEV__ && (forceRecover || !__TEST__)) {
const info = ErrorTypeStrings[type]
if (contextVNode) {
pushWarningContext(contextVNode)
if (
trace.length &&
// avoid spamming console during tests
- (typeof process === 'undefined' || process.env.NODE_ENV !== 'test')
+ !__TEST__
) {
warnArgs.push(`\n`, ...formatTrace(trace))
}
__VERSION__: `"${lernaJson.version}"`,
__DEV__: isBundlerESMBuild
? // preserve to be handled by bundlers
- `process.env.NODE_ENV !== 'production'`
+ `(process.env.NODE_ENV !== 'production')`
: // hard coded dev/prod builds
!isProduction,
+ // this is only used during tests
+ __TEST__: isBundlerESMBuild ? `(process.env.NODE_ENV === 'test')` : false,
// If the build is expected to run directly in the browser (global / esm-browser builds)
__BROWSER__: isBrowserBuild,
// support compile in browser?
// support options?
// the lean build drops options related code with buildOptions.lean: true
__FEATURE_OPTIONS__: !packageOptions.lean && !process.env.LEAN,
- __FEATURE_SUSPENSE__: true,
- // this is only used during tests
- __JSDOM__: false
+ __FEATURE_SUSPENSE__: true
})
}