 aacb45156b
			
		
	
	aacb45156b
	
	
	
		
			
			- Install Jest for unit testing with React Testing Library - Install Playwright for end-to-end testing - Configure Jest with proper TypeScript support and module mapping - Create test setup files and utilities for both unit and e2e tests Components: * Jest configuration with coverage thresholds * Playwright configuration with browser automation * Unit tests for LoginForm, AuthContext, and useSocketIO hook * E2E tests for authentication, dashboard, and agents workflows * GitHub Actions workflow for automated testing * Mock data and API utilities for consistent testing * Test documentation with best practices Testing features: - Unit tests with 70% coverage threshold - E2E tests with API mocking and user journey testing - CI/CD integration for automated test runs - Cross-browser testing support with Playwright - Authentication system testing end-to-end 🚀 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			58 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| 
 | |
| var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
 | |
| Object.defineProperty(exports, "__esModule", {
 | |
|   value: true
 | |
| });
 | |
| exports.screen = void 0;
 | |
| var _lzString = _interopRequireDefault(require("lz-string"));
 | |
| var _getQueriesForElement = require("./get-queries-for-element");
 | |
| var _helpers = require("./helpers");
 | |
| var _prettyDom = require("./pretty-dom");
 | |
| var queries = _interopRequireWildcard(require("./queries"));
 | |
| function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
 | |
| function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
 | |
| // WARNING: `lz-string` only has a default export but statically we assume named exports are allowed
 | |
| // TODO: Statically verify we don't rely on NodeJS implicit named imports.
 | |
| 
 | |
| function unindent(string) {
 | |
|   // remove white spaces first, to save a few bytes.
 | |
|   // testing-playground will reformat on load any ways.
 | |
|   return string.replace(/[ \t]*[\n][ \t]*/g, '\n');
 | |
| }
 | |
| function encode(value) {
 | |
|   return _lzString.default.compressToEncodedURIComponent(unindent(value));
 | |
| }
 | |
| function getPlaygroundUrl(markup) {
 | |
|   return `https://testing-playground.com/#markup=${encode(markup)}`;
 | |
| }
 | |
| const debug = (element, maxLength, options) => Array.isArray(element) ? element.forEach(el => (0, _prettyDom.logDOM)(el, maxLength, options)) : (0, _prettyDom.logDOM)(element, maxLength, options);
 | |
| const logTestingPlaygroundURL = (element = (0, _helpers.getDocument)().body) => {
 | |
|   // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | |
|   if (!element || !('innerHTML' in element)) {
 | |
|     console.log(`The element you're providing isn't a valid DOM element.`);
 | |
|     return;
 | |
|   }
 | |
|   // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
 | |
|   if (!element.innerHTML) {
 | |
|     console.log(`The provided element doesn't have any children.`);
 | |
|     return;
 | |
|   }
 | |
|   const playgroundUrl = getPlaygroundUrl(element.innerHTML);
 | |
|   console.log(`Open this URL in your browser\n\n${playgroundUrl}`);
 | |
|   return playgroundUrl;
 | |
| };
 | |
| const initialValue = {
 | |
|   debug,
 | |
|   logTestingPlaygroundURL
 | |
| };
 | |
| const screen = exports.screen = typeof document !== 'undefined' && document.body // eslint-disable-line @typescript-eslint/no-unnecessary-condition
 | |
| ? (0, _getQueriesForElement.getQueriesForElement)(document.body, queries, initialValue) : Object.keys(queries).reduce((helpers, key) => {
 | |
|   // `key` is for all intents and purposes the type of keyof `helpers`, which itself is the type of `initialValue` plus incoming properties from `queries`
 | |
|   // if `Object.keys(something)` returned Array<keyof typeof something> this explicit type assertion would not be necessary
 | |
|   // see https://stackoverflow.com/questions/55012174/why-doesnt-object-keys-return-a-keyof-type-in-typescript
 | |
|   helpers[key] = () => {
 | |
|     throw new TypeError('For queries bound to document.body a global document has to be available... Learn more: https://testing-library.com/s/screen-global-error');
 | |
|   };
 | |
|   return helpers;
 | |
| }, initialValue); |