Home / File/ toThrow.js — react Source File

toThrow.js — react Source File

Architecture documentation for toThrow.js, a javascript file in the react codebase.

Entity Profile

Relationship Graph

Source Code

'use strict';

// V8 uses a different message format when reading properties of null or undefined.
// Older versions use e.g. "Cannot read property 'world' of undefined"
// Newer versions use e.g. "Cannot read properties of undefined (reading 'world')"
// This file overrides the built-in toThrow() matches to handle both cases,
// enabling the React project to support Node 12-16 without forking tests.

const toThrowMatchers = require('expect/build/toThrowMatchers').default;
const builtInToThrow = toThrowMatchers.toThrow;

// Detect the newer stack format:
let newErrorFormat = false;
try {
  null.test();
} catch (error) {
  if (error.message.includes('Cannot read properties of null')) {
    newErrorFormat = true;
  }
}

// Detect the message pattern we need to rename:
const regex = /Cannot read property '([^']+)' of (.+)/;

// Massage strings (written in the older format) to match the newer format
// if tests are currently running on Node 16+
function normalizeErrorMessage(message) {
  if (newErrorFormat) {
    const match = message.match(regex);
    if (match) {
      return `Cannot read properties of ${match[2]} (reading '${match[1]}')`;
    }
  }

  return message;
}

function toThrow(value, expectedValue) {
  if (typeof expectedValue === 'string') {
    expectedValue = normalizeErrorMessage(expectedValue);
  } else if (expectedValue instanceof Error) {
    expectedValue.message = normalizeErrorMessage(expectedValue.message);
  }

  return builtInToThrow.call(this, value, expectedValue);
}

module.exports = {
  toThrow,
};

Domain

Subdomains

Frequently Asked Questions

What does toThrow.js do?
toThrow.js is a source file in the react codebase, written in javascript. It belongs to the BabelCompiler domain, Entrypoint subdomain.
What functions are defined in toThrow.js?
toThrow.js defines 2 function(s): normalizeErrorMessage, toThrow.
Where is toThrow.js in the architecture?
toThrow.js is located at scripts/jest/matchers/toThrow.js (domain: BabelCompiler, subdomain: Entrypoint, directory: scripts/jest/matchers).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free