{"id":17473675,"url":"https://github.com/angular-package/testing","last_synced_at":"2026-02-03T23:03:36.984Z","repository":{"id":44700816,"uuid":"382491097","full_name":"angular-package/testing","owner":"angular-package","description":"Jasmine unit testing wrapper with additional custom testing features.","archived":false,"fork":false,"pushed_at":"2024-11-24T01:05:13.000Z","size":633,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-23T04:50:06.627Z","etag":null,"topics":["jasmine","unittesting","wrapper"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angular-package.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["angular-package"],"patreon":"angularpackage","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2021-07-03T00:18:08.000Z","updated_at":"2024-10-31T02:07:45.000Z","dependencies_parsed_at":"2024-11-20T19:18:52.463Z","dependency_job_id":"f1c16c36-76c3-41f6-94a5-36679b121ca9","html_url":"https://github.com/angular-package/testing","commit_stats":{"total_commits":101,"total_committers":3,"mean_commits":"33.666666666666664","dds":"0.20792079207920788","last_synced_commit":"38a4fec8de0a5f52d94e8d48faeb444ef8770744"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/angular-package/testing","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Ftesting","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Ftesting/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Ftesting/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Ftesting/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angular-package","download_url":"https://codeload.github.com/angular-package/testing/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angular-package%2Ftesting/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261565461,"owners_count":23177763,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["jasmine","unittesting","wrapper"],"created_at":"2024-10-18T18:06:24.160Z","updated_at":"2026-02-03T23:03:31.952Z","avatar_url":"https://github.com/angular-package.png","language":"TypeScript","funding_links":["https://github.com/sponsors/angular-package","https://patreon.com/angularpackage","https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/angular-package","https://patreon.com/sciborrudnicki"],"categories":[],"sub_categories":[],"readme":"# angular-package\n\n\u003ca href='https://angular-package.dev' target='_blank'\u003e\n  \u003cimg align=\"right\"  width=\"92\" height=\"92\" src=\"https://avatars.githubusercontent.com/u/31412194?s=400\u0026u=c9929aa36826318ccac8f7b84516e1ce3af7e21c\u0026v=4\" /\u003e\n\u003c/a\u003e\n\nThe angular-package supports the development process of [angular](https://angular.io)-based applications in varied ways through the thoughtful, reusable, easy-to-use small pieces of code called packages.\n\n\u003cbr\u003e\n\n\u003ca href=\"https://jasmine.github.io/\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/angular-package/testing/5f7317739d3e1b678e09a49cb2c3fa6e8b9049b1/logo/Jasmine.svg\" width=\"200\" height=\"122\" /\u003e\n\u003c/a\u003e\n\n## Testing\n\n@angular-package/testing\n\nJasmine unit testing wrapper with additional custom testing features.\n\n[![Gitter][gitter-badge]][gitter-chat]\n[![Discord][discord-badge]][discord-channel]\n[![Twitter][twitter-badge]][twitter-follow]\n\u003c!-- npm badge --\u003e\n[![npm version][testing-npm-badge-svg]][testing-npm-badge]\n\u003c!-- GitHub badges --\u003e\n[![GitHub issues][testing-badge-issues]][testing-issues]\n[![GitHub forks][testing-badge-forks]][testing-forks]\n[![GitHub stars][testing-badge-stars]][testing-stars]\n[![GitHub license][testing-badge-license]][testing-license]\n\u003c!-- Sponsors badges --\u003e\n[![GitHub sponsors][github-badge-sponsor]][github-sponsor-link]\n[![Support me on Patreon][patreon-badge]][patreon-link]\n\n\u003cbr\u003e\n\n## Table of contents\n\n* [Basic concepts](#basic-concepts)\n* [Skeleton](#skeleton)\n* [Installation](#installation)\n* [Api](#api)\n* [Usage](#usage)\n  * [`Testing`](#testing-class)\n  * [`TestingActual`](#testingactual)\n  * [`TestingCustom`](#testingcustom)\n* [Features](#features)\n  * [Expectations](#expectations)\n    * [Nested](#nested-expectations)\n    * [Standalone](#standalone-expectations)\n  * [It](#it)\n    * [Nested](#nested)\n    * [Standalone](#standalone)\n* [Changelog](#changelog)\n* [Git](#git)\n  * [Commit](#commit)\n  * [Versioning](#versioning)\n* [License](#license)\n\n\u003cbr\u003e\n\n## Basic concepts\n\nChecks\n\u003e It's to check the provided value to be **the same** as **expected**.\n\nType guard (constrain)\n\u003e Constrains the parameter type to **not let** input **unexpected** value in the **code editor**.\n\nGuards\n\u003e It's a **combination** of both above, **constrains** the type of the parameter in the **code editor**, and checks its provided argument.\n\nDefines\n\u003e Returns defined value from a method of an object.  \n\u003e Defines new value in an object and returns a defined value.  \n\nGets\n\u003e Returns a value from an object.\n\nSets\n\u003e Adds or updates an element with a specified key and a value to an object and returns an object.  \n\n\u003cbr\u003e\n\n## Skeleton\n\nThis package was built by the [library skeleton][skeleton] which was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.2.5.\n\nCopy this package to the `packages/testing` folder of the [library skeleton][skeleton] then run the commands below.\n\n### Build\n\nRun `ng build testing` to build the package. The build artifacts will be stored in the `dist/` directory.\n\n### Running unit tests\n\nRun `ng test testing` to execute the unit tests via [Karma](https://karma-runner.github.io).\n\n\u003cbr\u003e\n\n## Installation\n\nInstall `@angular-package/testing` package with command:\n\n```bash\nnpm i --save @angular-package/testing\n```\n\nDependencies\n\n```bash\nnpm i tslib\nnpm i jasmine\n```\n\n\u003cbr\u003e\n\n## Api\n\n```typescript\n/**\n * Main.\n */\nexport {\n  Random,\n\n  Testing, // Main class with all testings.\n  TestingActual, // Initialize testing for `actual`.\n  TestingCustom, // Class to pass custom testings.\n\n  // Full named expectations. Methods with `expect()` + jasmine matchers.\n  TestingExpectation,\n\n  // Class to handle `describe()` function of jasmine.\n  TestingDescribe,\n\n  // Class to handle `it()` function of jasmine.\n  TestingIt,\n\n  // Class to handle `expect()` function of jasmine.\n  TestingExpect,\n\n  // Class to handle `describe`, `it`, `expect` of jasmine.\n  TestingCore,\n\n  // Abstract class to handle executable tests.\n  TestingExecutable,\n} from './lib';\n\n// Specific expectations.\nexport {\n  TestingExpectTo,\n  TestingExpectToBe,\n  TestingExpectToBeArrayOf,\n  TestingExpectToBeInstanceOf,\n  TestingExpectToHave,\n  TestingExpectToHaveBeen,\n  TestingExpectToHaveBeenCalled,\n  TestingExpectToThrow,\n} from './lib/expectation';\n\n// Methods with `it()` function of jasmine.\nexport {\n  TestingItTo,\n  TestingItToBe,\n  TestingItToBeArrayOf,\n  TestingItToBeBoolean,\n  TestingItToBeInstanceOf,\n  TestingItToHave,\n  TestingItToHaveBeen,\n  TestingItToHaveBeenCalled,\n  TestingItToThrow,\n} from './lib/it';\n\n// Testing classes for use with `TestingCustom`.\nexport {\n  TestingTo,\n  TestingToBe,\n  TestingToBeArrayOf,\n  TestingToBeBoolean,\n  TestingToBeGreaterThan,\n  TestingToBeInstanceOf,\n  TestingToBeLessThan,\n  TestingToBeNumber,\n  TestingToBeObject,\n  TestingToBeString,\n  TestingToHave,\n  TestingToThrow,\n} from './lib/testing';\n```\n\n```typescript\n// Helper constants.\nimport {\n  // Example class for testing.\n  TestingClass,\n  TestingPerson,\n\n  // Array.\n  TESTING_ARRAY_BIGINT,\n  TESTING_ARRAY_BOOLEAN,\n  TESTING_ARRAY_CLASS,\n  TESTING_ARRAY_FUNCTION,\n  TESTING_ARRAY_NULL,\n  TESTING_ARRAY_NUMBER,\n  TESTING_ARRAY_OBJECT_ONE,\n  TESTING_ARRAY_STRING,\n  TESTING_ARRAY_SYMBOL_NUMBER,\n  TESTING_ARRAY_SYMBOL_STRING,\n  TESTING_ARRAY_UNDEFINED,\n  // BigInt\n  TESTING_BIGINT,\n  // Class.\n  TESTING_CLASS,\n  TESTING_PERSON,\n  // Date.\n  TESTING_DATE,\n  // Boolean.\n  TESTING_FALSE,\n  TESTING_FALSE_INSTANCE,\n  TESTING_TRUE,\n  TESTING_TRUE_INSTANCE,\n  // Function.\n  TESTING_FUNCTION,\n  TESTING_FUNCTION_CONSTRUCTOR,\n  TESTING_FUNCTION_CONSTRUCTOR_PERSON,\n  // null.\n  TESTING_NULL,\n  // Number.\n  TESTING_NUMBER,\n  TESTING_NUMBER_CONSTRUCTOR,\n  TESTING_NUMBER_INSTANCE,\n  // Object.\n  TESTING_OBJECT,\n  // RegExp.\n  TESTING_REGEXP,\n  // String.\n  TESTING_STRING,\n  TESTING_STRING_CONSTRUCTOR,\n  TESTING_STRING_INSTANCE,\n  // Symbol.\n  TESTING_SYMBOL_NUMBER,\n  TESTING_SYMBOL_STRING,\n  // Undefined.\n  TESTING_UNDEFINED,\n} from '@angular-package/testing';\n```\n\n```typescript\nimport {\n  // Interface. \n  TestingObject,\n  TestingPersonShape\n} from '@angular-package/testing';\n```\n\n\u003cbr\u003e\n\n## Usage\n\n### `Testing` class\n\nMain class for testing.\n\n```typescript\nimport { Testing } from \"@angular-package/testing\";\n\nconst t = new Testing();\n\n// Describe.\nt.describe(`Describe`, () =\u003e {\n  // Prepared `it` spec.\n  t.toBeBigInt(BigInt(37));\n  // Prepared expectation.\n  t.it(`It`, () =\u003e t.expect.toBeBigInt(BigInt(27)));\n});\n```\n\n### `TestingActual`\n\nClass to set `actual` value and use multiple testing `it` methods. It can be used through the `actual()` or `spy()` methods of `Testing`.\n\nExample\n\n```typescript\nimport { TestingActual } from \"@angular-package/testing\";\n\nconst t = new TestingActual();\n\nclass ClassA {\n  public methodA(value?: any) {\n    return \"methodA\";\n  }\n\n  public methodB(value?: any) {\n    return \"methodB\";\n  }\n}\n\nconst classA = new ClassA();\n\nt.describe('TestingActual', () =\u003e {\n\n  // \n  t\n    .actual('a b c d e f g h i j k l m n o p r s')\n    .toBeString()\n    .stringIncludes(['f'])\n    .stringIncludesSome(['f', 'z'])\n    .stringOfLengthBetween(27, 47)\n    .toBeStringType()\n  \n  t\n    .beforeEach(() =\u003e {\n      spyOn(classA, \"methodA\");\n      classA.methodA({test: 27});\n    })\n    .spy(() =\u003e classA.methodA)\n    .toHaveBeenCalled()\n    .toHaveBeenCalledWith({test: 27})\n    .toHaveBeenCalledTimes(1)\n    .toHaveBeenCalledOnceWith({test: 27})\n});\n```\n\n### `TestingCustom`\n\nUse `TestingCustom` class for custom testing. Access to the included tests is through the `testing` getter.\n\n```typescript\nimport {\n  TestingCustom,\n  TestingDescribe,\n  TestingExpectation,\n  TestingIt,\n  TestingToBe,\n} from \"@angular-package/testing\";\n\nconst t = new TestingCustom(\n  // List of test to use.\n  [\n    TestingToBe\n  ],\n  true, // Describe executable.\n  true, // It executable.\n  { describe: [], it: [] }, // Executable numbers of `describe` and `it`.\n  ['DescribeA'], // Descriptions for `describe`.\n  ['ItA'], // Expectations for `it`.\n  [false, false], // `boolean` or list of [`boolean`, `boolean`]\n  new TestingDescribe(), // Common instance for `TestingDescribe` for `counter` purposes\n  new TestingIt(),  // Common instance for `TestingIt` for `counter` purposes\n  new TestingExpectation() // Common instance for `TestingExpectation`\n);\n\nt.describe(\n  `DescribeA`,\n  () =\u003e t.testing // testing getter\n    .beforeEach(() =\u003e {})\n    .toBeDate(new Date())\n    .toBeUndefined(undefined)\n);\n```\n\n\u003cbr\u003e\n\n## Features\n\n### Expectations\n\nExpectation is a method built from `expect()` and `jasmine` matcher.\n\n```typescript\npublic expectation(actual, expected) {\n  expect(actual).matcher(expected);\n  return this;\n}\n```\n\n### Nested expectations\n\nExpectation methods are accessed in `TestingExpectTo` by using nested object structure and method names.\n\nExample\n\n```typescript\nimport { Testing, TestingExpectTo } from \"@angular-package/testing\";\n\nconst t = new Testing();\nconst to = new TestingExpectTo();\n\nt.describe(`TestingExpectTo`, () =\u003e t\n  .it(`it`, () =\u003e to\n    .contain(['a', 'b', 'c'], 'c')\n    .contain('string number', 'ber')\n    .equal({a: 2}, {a: 2})\n    .match(\"my string\", /string$/)\n    .match('number', 'ber')\n\n    .not.contain(['a', 'b', 'c'], 'h')\n    .contain(['a', 'b', 'c'], 'a')\n\n    .be.not.bigint('a')\n  )\n);\n```\n\n### Standalone expectations\n\nExpectation methods are directly accessed in `TestingExpectation` by using method names instead of nested structure, but using it through the `TestingExpectTo`.\n\nExample expectation method with `actual` param.\n\n```typescript\npublic toBeTypeOf\u003cT\u003e(\n  actual: ExpectType\u003cT\u003e,\n  expected: jasmine.Expected\u003cstring\u003e,\n  expectationFailOutput?: any\n): this {\n  this.#testingTo.be.typeOf(actual, expected, expectationFailOutput);\n  return this;\n}\n```\n\nExample expectation method with `spy` param.\n\n```typescript\npublic toHaveBeenCalled\u003cT extends jasmine.Func\u003e(\n  spy: ExpectType\u003cT\u003e,\n  expectationFailOutput?: any\n): this {\n  this.#testingTo.have.been.called.called(spy, expectationFailOutput);\n  return this;\n}\n```\n\nJasmine matchers in use.\n\n- [x] `toBe()`\n- [x] `toBeCloseTo()`\n- [x] `toBeDefined()`\n- [x] `toBeFalse()`\n- [x] `toBeFalsy()`\n- [x] `toBeGreaterThan()`\n- [x] `toBeGreaterThanOrEqual()`\n- [x] `toBeInstanceOf()`\n- [x] `toBeLessThan()`\n- [x] `toBeLessThanOrEqual()`\n- [x] `toBeNaN()`\n- [x] `toBeNegativeInfinity()`\n- [x] `toBeNull()`\n- [x] `toBePositiveInfinity()`\n- [x] `toBeTrue()`\n- [x] `toBeTruthy()`\n- [x] `toBeUndefined()`\n- [x] `toContain()`\n- [x] `toEqual()`\n- [x] `toHaveBeenCalled()`\n- [x] `toHaveBeenCalledBefore()`\n- [x] `toHaveBeenCalledOnceWith()`\n- [x] `toHaveBeenCalledTimes()`\n- [x] `toHaveBeenCalledWith()`\n- [x] `toHaveClass()`\n- [x] `toHaveSize()`\n- [x] `toHaveSpyInteractions()`\n- [x] `toMatch()`\n- [x] `toThrow()`\n- [x] `toThrowError()`\n- [x] `toThrowMatching()`\n\nExpectations based on the `instanceOf` matcher of `jasmine`.\n\n- [x] `toBeInstanceOfArray()`\n- [x] `toBeInstanceOfBoolean()`\n- [x] `toBeInstanceOfDate()`\n- [x] `toBeInstanceOfError()`\n- [x] `toBeInstanceOfFunction()`\n- [x] `toBeInstanceOfMap()`\n- [x] `toBeInstanceOfNumber()`\n- [x] `toBeInstanceOfObject()`\n- [x] `toBeInstanceOfPromise()`\n- [x] `toBeInstanceOfRangeError()`\n- [x] `toBeInstanceOfReferenceError()`\n- [x] `toBeInstanceOfRegExp()`\n- [x] `toBeInstanceOfSet()`\n- [ ] `toBeInstanceOfStorage()`\n- [x] `toBeInstanceOfString()`\n- [x] `toBeInstanceOfSyntaxError()`\n- [x] `toBeInstanceOfTypeError()`\n- [x] `toBeInstanceOfURIError()`\n- [x] `toBeInstanceOfWeakSet()`\n\nExpectations based on the `is` of `@angular-package/type` and `toBe()` matcher of `jasmine`.\n\n- [x] `toBeArray()`\n- [x] `toBeBigInt()`\n- [x] `toBeBoolean()`\n- [x] `toBeBooleanType()`\n- [x] `toBeClass()`\n- [x] `toBeDate()`\n- [x] `toBeFunction()`\n- [x] `toBeInstance()`\n- [x] `toBeKey()`\n\nNumber\n\n- [x] `toBeNumber()`\n- [x] `toBeNumberBetween()`\n- [x] `toBeNumberType()`\n\nObject\n\n- [x] `toBeObject()`\n- [x] `toBeObjectKey()`\n- [x] `toBeObjectKeyIn()`\n- [x] `toBeObjectKeys()`\n- [x] `toBeObjectKeysIn()`\n- [x] `toBeObjectSomeKeys()`\n\nString\n\n- [x] `toBeString()`\n- [x] `toBeStringIncludes()`\n- [x] `toBeStringIncludesSome()`\n- [x] `toBeStringOfLength()`\n- [x] `toBeStringOfLengthBetween()`\n- [x] `toBeStringType()`\n\nOther\n\n- [x] `toBeRegExp()`\n- [x] `toBeSymbol()`\n- [x] `toBeTypeOf()`\n\nExpectations based on the `are` of `@angular-package/type` and `toBe()` matcher of `jasmine`.\n\n- [x] `toBeArrayOfBigInt()`\n- [x] `toBeArrayOfBoolean()`\n- [x] `toBeArrayOfDate()`\n- [x] `toBeArrayOfDefined()`\n- [x] `toBeArrayOfFalse()`\n- [x] `toBeArrayOfNull()`\n- [x] `toBeArrayOfNumber()`\n- [x] `toBeArrayOfRegExp()`\n- [x] `toBeArrayOfString()`\n- [x] `toBeArrayOfSymbol()`\n- [x] `toBeArrayOfTrue()`\n- [x] `toBeArrayOfUndefined()`\n\nExample\n\n```typescript\nimport { Testing, TestingExpectation } from \"@angular-package/testing\";\n\nconst t = new Testing();\nconst to = new TestingExpectation();  \n\nt.describe(`TestingExpectation`, () =\u003e t\n  .spec(e =\u003e e.toBeArrayOfNull([null, null]))\n  .it(`it`, () =\u003e to\n    .toContain(['a', 'b', 'c'], 'c')\n    .toContain('string number', 'ber')\n    .toEqual({a: 2}, {a: 2})\n    .toMatch(\"my string\", /string$/)\n    .toMatch('number', 'ber')\n\n    .not.toContain(['a', 'b', 'c'], 'h')\n    .toContain(['a', 'b', 'c'], 'a')\n\n    .not.toBeBigInt('a')\n  )\n);\n```\n\n### It\n\nPrepared specs `it` of `jasmine` built. Spec is a method built from `it` with expectation - `expect()` and `jasmine` matcher.\n\n```typescript\nit(description, () =\u003e expect(expect).matcher(expected))\n```\n\n### Nested\n\n`it` methods are accessed by using nested object structure and method names.\n\n### `TestingItTo`\n\nPrepared `it` tests of `jasmine`.\n\nNested `It` objects under specific getter\n\n- [x] `get be(): TestingItToBe`\n- [x] `get have(): TestingItToHave`\n- [x] `get throw(): TestingItToThrow`\n\nMethod\n\n- [x] `contain()`\n- [x] `equal()`\n- [x] `match()`\n\nExample\n\n```typescript\nimport { TestingItTo } from \"@angular-package/testing\";\n\nconst t = new TestingItTo();\n\n// `to{Method}`\nt.describe('TestingItTo', () =\u003e t\n  .contain(['a', 'b', 'c'], 'b')\n  .equal(['27', 37, 47], ['27', 37, 47])\n  .match(\"my string\", /string$/)\n  .match(\"other string\", \"ing\")\n);\n\n// `toBe{Method}`\nt.describe('TestingItTo', () =\u003e t.be\n  .array([27, 37])\n  .key(74)\n);\n\n// `toBeArrayOf{Method}`\nt.describe('TestingItTo', () =\u003e t.be.arrayof\n  .boolean([false, false])\n  .date([new Date(), new Date()])\n);\n\n// `toBeBoolean{Method}`\nt.describe('TestingItTo', () =\u003e t.be.boolean\n  .boolean(false)\n  .type(false)\n);\n\n// `toBeInstanceOf{Method}`\nt.describe('TestingItTo', () =\u003e t.be.instanceof\n  .array([27, 37])\n  .map(new Map())\n);\n\n// `toHave{Method}`\nt.describe('TestingItTo', () =\u003e t.have\n  .size([27, 37], 2)\n);\n\n// `toHaveBeenCalled{Method}`\nclass ClassA {\n  methodA(value?: any) {\n    return \"methodA\";\n  }\n  methodB(value?: any) {\n    return \"methodB\";\n  }\n}\nlet classA: ClassA;\nt.describe('TestingItTo', () =\u003e t.have.been.called\n  .beforeEach(() =\u003e {\n    classA = new ClassA();\n    spyOn(classA, \"methodA\");\n    classA.methodA();\n    spyOn(classA, \"methodB\");\n    classA.methodB();\n  })\n  .called(() =\u003e classA.methodA)\n  // multiple calls\n  .called(() =\u003e [classA.methodA, classA.methodB])\n);\n\n// `toThrow{Method}`\nt.describe('TestingItTo', () =\u003e t.throw\n  .error(function() { throw new Error('Error') }, 'Error')\n  .matching(\n    function() { throw new Error('nope'); },\n    function(thrown) { return thrown.message === 'nope'; }\n  )\n  .throw(function() { throw 'things'; }, 'things')\n);\n```\n\n### `TestingItToBe`\n\nNested `It` objects under specific getter\n\n- [x] `get arrayof(): TestingItToBeArrayOf`\n- [x] `get boolean(): TestingItToBeBoolean`\n- [x] `get instanceof(): TestingItToBeInstanceOf`\n\nMethod\n\n- [x] `be()`\n- [x] `array()`\n- [x] `bigInt()`\n- [x] `class()`\n- [x] `closeTo()`\n- [x] `date()`\n- [x] `defined()`\n- [x] `false()`\n- [x] `falsy()`\n- [x] `function()`\n- [x] `greaterThan()`\n- [x] `greaterThanOrEqual()`\n- [x] `instance()`\n- [x] `instanceOf()`\n- [x] `key()`\n- [x] `lessThan()`\n- [x] `lessThanOrEqual()`\n- [x] `naN()`\n- [x] `negativeInfinity()`\n- [x] `null()`\n- [x] `number()`\n- [x] `numberBetween()`\n- [x] `numberType()`\n- [x] `object()`\n- [x] `objectKey()`\n- [x] `objectKeyIn()`\n- [x] `objectKeys()`\n- [x] `objectKeysIn()`\n- [x] `objectSomeKeys()`\n- [x] `positiveInfinity()`\n- [x] `regExp()`\n- [x] `pending()`\n- [x] `rejected()`\n- [x] `rejectedWith()`\n- [x] `rejectedWithError()`\n- [x] `resolved()`\n- [x] `resolvedTo()`\n- [x] `string()`\n- [x] `stringIncludes()`\n- [x] `stringIncludesSome()`\n- [x] `stringOfLength()`\n- [x] `stringOfLengthBetween()`\n- [x] `stringType()`\n- [x] `symbol()`\n- [x] `true()`\n- [x] `truthy()`\n- [x] `undefined()`\n\nExample\n\n```typescript\nimport { TestingItToBe } from \"@angular-package/testing\";\n\nconst t = new TestingItToBe();\n\nt.describe(`TestingItToBe`, () =\u003e {\n  t\n    .arrayof\n    .bigint([BigInt(27)])\n\n  t\n    .boolean\n    .boolean([true, false])\n    .type([true, false]);\n\n  t\n    .instanceof\n\n  t\n    .array([27, 37])\n    .bigInt([BigInt(27)])\n    .class(t)\n    .date(new Date())\n    .defined('a')\n    .false(false)\n    .falsy(false)\n    .function(() =\u003e {})\n    .greaterThan(37, 27)\n    .greaterThanOrEqual(37, 37)\n    .instance(t, TestingItToBe)\n    .instanceOf(t, TestingItToBe)\n    .key('PropertyKey')\n    .lessThan(37, 47)\n    .lessThanOrEqual(47, 47)\n    .naN(NaN)\n    .negativeInfinity(-Infinity)\n    .null(null)\n    .number(47)\n    .numberBetween(37, 27, 47)\n    .numberType(37)\n    .object({})\n    .objectKey({a: 1}, \"a\")\n    .objectKeyIn(t, \"except\")\n\n    .objectKeys({a: 1, b: 2}, [\"a\", \"b\"])\n    .objectKeysIn(t, [\"except\"])\n    // .objectSomeKeys()\n    .pending(new Promise((resolve, reject) =\u003e {}))\n\n    .positiveInfinity(Infinity)\n    .regExp(new RegExp(/a/))\n    .rejected(new Promise((resolve, reject) =\u003e { reject(\"a\") }))\n    .rejectedWith(new Promise((resolve, reject) =\u003e { reject(\"a\")}), \"a\")\n    .rejectedWithError(new Promise((resolve, reject) =\u003e { throw new Error(\"Error\") }), Error, \"Error\")\n\n    .resolved(new Promise((resolve, reject) =\u003e { resolve(\"a\") }))\n    .resolvedTo(new Promise((resolve, reject) =\u003e { resolve(\"a\") }), \"a\")\n\n    .string(\"a\")\n    .stringIncludes(\"a b c d\", [\"d\"])\n    .stringIncludesSome(\" a b  c d \", [\"a\", \"e\", \"c\"])\n    .stringOfLength(\"a b c d e f g h i j k l m n o p r s\", 18)\n    .stringOfLengthBetween(\"a b c d e f g h i j k l m n o p r s\", 17, 18)\n    .stringType(\"a b c d e f\")\n});\n```\n\n### `TestingItToBeArrayOf`\n\nMethod\n\n- [x] `bigint()`\n- [x] `boolean()`\n- [x] `date()`\n- [x] `defined()`\n- [x] `false()`\n- [x] `null()`\n- [x] `number()`\n- [x] `regExp()`\n- [x] `string()`\n- [x] `symbol()`\n- [x] `true()`\n- [x] `undefined()`\n\nExample\n\n```typescript\nimport { TestingItToBeArrayOf } from \"@angular-package/testing\";\n\nconst t = new TestingItToBeArrayOf();\n\nt.describe(`TestingItToBeArrayOf`, () =\u003e t\n  .bigint([BigInt(27), BigInt(37), BigInt(47)])\n  .boolean([false, true, false, false, true])\n  .date([new Date(), new Date(), new Date(), new Date()])\n  .defined(['b', 'c', 'd', 'e'])\n  .false([false, false, false, false, false])\n  .null([null, null, null])\n  .number([27, 37, 47])\n  .regExp([new RegExp('a'), new RegExp(/a/), new RegExp('b')])\n  .string(['a', 'b', 'c'])\n  .symbol([Symbol(27), Symbol('a'), Symbol('b')])\n  .true([true, true, true])\n  .undefined([undefined, undefined, undefined])\n);\n```\n\n### `TestingItToBeBoolean`\n\n```typescript\nimport { TestingItToBeBoolean } from \"@angular-package/testing\";\n```\n\nMethod\n\n- [x] `boolean()`\n- [x] `type()`\n\n### `TestingItToBeInstanceOf`\n\nMethod\n\n- [x] `array()`\n- [x] `boolean()`\n- [x] `date()`\n- [x] `error()`\n- [x] `function()`\n- [x] `map()`\n- [x] `number()`\n- [x] `object()`\n- [x] `promise()`\n- [x] `rangeError()`\n- [x] `referenceError()`\n- [x] `regExp()`\n- [x] `set()`\n- [ ] `storage()`\n- [x] `string()`\n- [x] `syntaxError()`\n- [x] `typeError()`\n- [x] `URIError()`\n- [x] `weakMap()`\n- [x] `weakSet()`\n\nExample\n\n```typescript\nimport { TestingItToBeInstanceOf } from \"@angular-package/testing\";\n\nconst t = new TestingItToBeInstanceOf();\n\nt.describe(`TestingItToBeInstanceOf`, () =\u003e t\n  .array(['a', 'b', 'c'])\n  .boolean(false)\n  .date(new Date())\n  .error(new Error())\n  .function(function() {})\n  .map(new Map())\n  .number(new Number(27))\n  .object(new Object({}))\n  .promise(new Promise((resolve, reject) =\u003e { resolve('a') }))\n  .rangeError(new RangeError('range error'))\n  .referenceError(new ReferenceError('reference'))\n  .regExp(new RegExp('a'))\n  .set(new Set('a'))\n  // .storage()\n  .string('a')\n  .syntaxError(new SyntaxError('syntax error'))\n  .typeError(new TypeError('type error'))\n  .weakSet(new WeakSet())\n);  \n```\n\n### `TestingItToHave`\n\nNested `It` object under specific getter\n\n- [x] `get been(): TestingItToHaveBeen`\n\nMethod\n\n- [x] `class()`\n- [x] `size()`\n- [x] `spyInteractions()`\n\nExample\n\n```typescript\nimport { TestingItToHave } from \"@angular-package/testing\";\n\nconst t = new TestingItToHave();\n\nconst el = document.createElement('div');\nel.className = 'foo bar baz';\n\nclass ClassA {\n  public methodA() {\n    return \"methodA\";\n  }\n}\nconst classA = new ClassA();\n\nt.describe('TestingItToHave', () =\u003e t\n  .beforeEach(() =\u003e {\n    spyOn(classA, \"methodA\");\n    classA.methodA();\n  })\n  .class(el, 'bar')\n  .size(['a', 'b'], 2)\n  .spyInteractions(classA)\n);\n```\n\n### `TestingItToHaveBeen`\n\n```typescript\nimport { TestingItToHaveBeen } from \"@angular-package/testing\";\n```\n\n### `TestingItToHaveBeenCalled`\n\nMethod\n\n- [x] `before()`\n- [x] `called()`\n- [x] `onceWith()`\n- [x] `with()`\n\nExample\n\n```typescript\nimport { TestingItToHaveBeenCalled } from \"@angular-package/testing\";\n\nconst t = new TestingItToThrow();\n\nt.describe('TestingItToThrow', () =\u003e t\n  .error(function() { throw new Error('Error') }, 'Error')\n  .matching(\n    function() { throw new Error('nope'); },\n    function(thrown) { return thrown.message === 'nope'; }\n  )\n  .throw(function() { throw 'things'; }, 'things')\n);\n```\n\n### `TestingItToThrow`\n\nPrepared `toThrow` tests.\n\nMethod\n\n- [x] `error()`\n- [x] `matching()`\n- [x] `throw()`\n\n### Standalone\n\n`it` methods are directly accessed by using method names instead of nested structure, but using it.\nStandalone tests are designed to mixin them in `TestingCustom` class.\n\nExample `it` method with `actual` param.\n\n```typescript\npublic toEqual\u003cT\u003e(\n  actual: ExpectType\u003cT\u003e,\n  expected: jasmine.Expected\u003ctypeof actual\u003e,\n  expectation?: string,\n  expectationFailOutput?: any,\n  execute?: boolean,\n): this {\n  this.to.equal(actual, expected, expectation, expectationFailOutput, execute);\n  return this;\n}\n```\n\nExample `it` method with `spy` param.\n\n```typescript\npublic toHaveBeenCalled\u003cT extends jasmine.Func\u003e(\n  spy: () =\u003e ExpectType\u003cT\u003e | ExpectType\u003cT\u003e[],\n  expectation?: string,\n  expectationFailOutput?: any,\n  execute?: boolean,\n): this {\n  this.toHave.been.called.called(spy, expectation, expectationFailOutput, execute);\n  return this;\n}\n```\n\n### `TestingToBeArrayOf`\n\nPrepared `it` specs prefixed with `testingToBeArrayOf`.\n\n- [x] `toBeArrayOfBigInt()`\n- [x] `toBeArrayOfDate()`\n- [x] `toBeArrayOfDefined()`\n- [x] `toBeArrayOfFalse()`\n- [x] `toBeArrayOfNull()`\n- [x] `toBeArrayOfRegExp()`\n- [x] `toBeArrayOfString()`\n- [x] `toBeArrayOfSymbol()`\n- [x] `toBeArrayOfTrue()`\n- [x] `toBeArrayOfUndefined()`\n\n### `TestingToBeBoolean`\n\nPrepared `it` specs prefixed with `toBeBoolean`.\n\n- [x] `toBeBoolean()`\n- [x] `toBeBooleanType()`\n\n### `TestingToBeGreaterThan`\n\nPrepared `it` specs prefixed with `toBeGreaterThan`.\n\n- [x] `toBeGreaterThan()`\n- [x] `toBeGreaterThanOrEqual()`\n\n### `TestingToBeInstanceOf`\n\nPrepared `it` specs prefixed with `toBeInstanceOf`.\n\n- [x] `toBeInstanceOfArray()`\n- [x] `toBeInstanceOfBoolean()`\n- [x] `toBeInstanceOfDate()`\n- [x] `toBeInstanceOfError()`\n- [x] `toBeInstanceOfFunction()`\n- [x] `toBeInstanceOfMap()`\n- [x] `toBeInstanceOfNumber()`\n- [x] `toBeInstanceOfObject()`\n- [x] `toBeInstanceOfPromise()`\n- [x] `toBeInstanceOfRangeError()`\n- [x] `toBeInstanceOfReferenceError()`\n- [x] `toBeInstanceOfRegExp()`\n- [x] `toBeInstanceOfSet()`\n- [ ] `toBeInstanceOfStorage()`\n- [x] `toBeInstanceOfString()`\n- [x] `toBeInstanceOfSyntaxError()`\n- [x] `toBeInstanceOfTypeError()`\n- [x] `toBeInstanceOfURIError()`\n- [x] `toBeInstanceOfWeakSet()`\n\n### `TestingToBeLessThan`\n\nPrepared `it` specs prefixed with `toBeLessThan`.\n\n- [x] `toBeLessThan()`\n- [x] `toBeLessThanOrEqual()`\n\n### `TestingToBeNumber`\n\nPrepared `it` specs prefixed with `toBeNumber`.\n\n- [x] `toBeNumber()`\n- [x] `toBeNumberBetween()`\n- [x] `toBeNumberType()`\n\n### `TestingToBeObject`\n\nPrepared `it` specs prefixed with `toBeObject`.\n\n- [x] `toBeObject()`\n- [x] `toBeObjectKey()`\n- [x] `toBeObjectKeyIn()`\n- [x] `toBeObjectKeys()`\n- [x] `toBeObjectKeysIn()`\n- [x] `toBeObjectSomeKeys()`\n\n### `TestingToBeString`\n\nPrepared `it` specs prefixed with `toBeString`.\n\n- [x] `toBeString()`\n- [x] `toBeStringIncludes()`\n- [x] `toBeStringIncludesSome()`\n- [x] `toBeStringOfLength()`\n- [x] `toBeStringOfLengthBetween()`\n- [x] `toBeStringType()`\n\n### `TestingToBe`\n\nPrepared `it` specs prefixed with `toBe`.\n\n- [x] `toBeArray()`\n- [x] `toBeBigInt()`\n- [x] `toBeClass()`\n- [x] `toBeCloseTo()`\n- [x] `toBeDate()`\n- [x] `toBeDefined()`\n- [x] `toBeFalse()`\n- [x] `toBeFalsy()`\n- [x] `toBeFunction()`\n- [x] `toBeInstance()`\n- [x] `toBeInstanceOf()`\n- [x] `toBeKey()`\n- [x] `toBeNaN()`\n- [x] `toBeNegativeInfinity()`\n- [x] `toBeNull()`\n- [x] `toBePending()`\n- [x] `toBePositiveInfinity()`\n- [x] `toBeRegExp()`\n- [x] `toBeRejected()`\n- [x] `toBeRejectedWith()`\n- [x] `toBeRejectedWithError()`\n- [x] `toBeResolved()`\n- [x] `toBeResolvedTo()`\n- [x] `toBeSymbol()`\n- [x] `toBeTrue()`\n- [x] `toBeTruthy()`\n- [x] `toBeUndefined()`\n\n### `TestingToHave`\n\nPrepared `it` specs prefixed with `toHave`.\n\n- [x] `toHaveBeenCalled()`\n- [x] `toHaveBeenCalledBefore()`\n- [x] `toHaveBeenCalledOnceWith()`\n- [x] `toHaveBeenCalledTimes()`\n- [x] `toHaveBeenCalledWith()`\n- [x] `toHaveClass()`\n- [x] `toHaveSize()`\n- [x] `toHaveSpyInteractions()`\n\n### `TestingToThrow`\n\nPrepared `it` specs prefixed with `toThrow`.\n\n- [x] `toThrowError()`\n- [x] `toThrowMatching()`\n\n### `TestingTo`\n\nPrepared `it` specs prefixed with `to`.\n\n- [x] `toBe()`\n- [x] `toContain()`\n- [x] `toEqual()`\n- [x] `toMatch()`\n- [x] `toThrow()`\n\n\u003cbr\u003e\n\n## Changelog\n\nThe **changelog** of this package is based on [*keep a changelog*](https://keepachangelog.com/en/1.0.0/). To read it, click on the [CHANGELOG.md](https://github.com/angular-package/testing/blob/main/CHANGELOG.md) link.\n\n\u003e A changelog is a file which contains a curated, chronologically ordered list of notable changes for each version of a project. - [*keep a changelog*](https://keepachangelog.com/en/1.0.0/)\n\n\u003cbr\u003e\n\n## GIT\n\n### Commit\n\n* [AngularJS Git Commit Message Conventions][git-commit-angular]\n* [Karma Git Commit Msg][git-commit-karma]\n* [Conventional Commits][git-commit-conventional]\n\n### Versioning\n\n[Semantic Versioning 2.0.0][git-semver]\n\n**Given a version number MAJOR.MINOR.PATCH, increment the:**\n\n* MAJOR version when you make incompatible API changes,\n* MINOR version when you add functionality in a backwards-compatible manner, and\n* PATCH version when you make backwards-compatible bug fixes.\n\nAdditional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.\n\n**FAQ**\nHow should I deal with revisions in the 0.y.z initial development phase?\n\n\u003e The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.\n\nHow do I know when to release 1.0.0?\n\n\u003e If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0.\n\n## License\n\nMIT © angular-package ([license][testing-license])\n\n## Packages\n\nUseful and simple packages.\n\n| Package                                      | Description                                                       | Status |\n| :------------------------------------------- | :---------------------------------------------------------------- | -----: |\n| [callback][callback-github-readme]           | Manages the callback [`function`][js-function].                   | [![npm version][callback-npm-badge-png]][callback-npm-badge] |\n| [change-detection][cd-github-readme]         | Improves application performance.                                 | [![npm version][cd-npm-badge-png]][cd-npm-badge] |\n| [component-loader][cl-github-readme]         | Handles dynamic loading components.                               | [![npm version][cl-npm-badge-png]][cl-npm-badge] |\n| [core][core-github-readme]                   | Core features.                                                    | [![npm version][core-npm-badge-png]][core-npm-badge] |\n| [error][error-github-readme]                 | Manages an [`Error`][js-error].                                   | [![npm version][error-npm-badge-png]][error-npm-badge] |\n| [indexeddb][indexeddb-github-readme]         | Wrapper to IndexedDB client-side storage.                         | [![npm version][indexeddb-npm-badge-png]][indexeddb-npm-badge] |\n| name                                         | The name with prefix and suffix.                                  | ![inprogress] |\n| preferences                                  | Preferences, settings, options, configuration and setup in steps. | ![inprogress] |\n| [prism][prism-github-readme]                 | [`Prism`][prism-js] highlighter module.                           | [![npm version][prism-npm-badge-png]][prism-npm-badge] |\n| [property][property-github-readme]           | Handles object properties.                                        | [![npm version][property-npm-badge-png]][property-npm-badge] |\n| [range][range-github-readme]                 | The range between a minimum and maximum.                          | [![npm version][range-npm-badge-png]][range-npm-badge] |\n| [reactive][reactive-github-readme]           | Automatize the process of creating some rxjs features.            | [![npm version][reactive-npm-badge-png]][reactive-npm-badge] |\n| [sass][sass-github-readme]                   | Extension for sass modules and new modules.                       | [![npm version][sass-npm-badge-png]][sass-npm-badge] |\n| [sass-list][sass-list-github-readme]         | Modified list Sass module.                                        | [![npm version][sass-list-npm-badge-png]][sass-list-npm-badge] |\n| [sass-string][sass-string-github-readme]     | Modified string Sass module.                                      | [![npm version][sass-string-npm-badge-png]][sass-string-npm-badge] |\n| [spectre.css][spectrecss-github-readme]      | Modified Spectre.css - a lightweight, responsive, and modern CSS framework originally designed by Yan Zhu. | [![npm version][spectrecss-npm-badge-png]][spectrecss-npm-badge] |\n| storage                                      | The storage of data under allowed names.                          | ![inprogress] |\n| tag                                          | Any tag with optional attributes.                                 | ![inprogress] |\n| [testing][testing-github-readme]             | Support for testing other packages.                               | [![npm version][testing-npm-badge-png]][testing-npm-badge] |\n| text                                         | Text on the template with replaceable tags.                       | ![inprogress] |\n| [type][type-github-readme]                   | Common types, type guards, and type checkers.                     | [![npm version][type-npm-badge-png]][type-npm-badge] |\n| [ui][ui-github-readme]                       | User interface.                                                   | [![npm version][ui-npm-badge-png]][ui-npm-badge] |\n| [wrapper][wrapper-github-readme]             | Wrap the text with the opening and closing chars.                 | [![npm version][wrapper-npm-badge-png]][wrapper-npm-badge] |\n\nClick on the package name to visit its [GitHub](https://github.com/) page.\n\n\u003c!-- Funding --\u003e\n[github-badge-sponsor]: https://img.shields.io/static/v1?label=Sponsor\u0026message=%E2%9D%A4\u0026logo=GitHub\u0026link=https://github.com/sponsors/angular-package\n[github-sponsor-link]: https://github.com/sponsors/angular-package\n[patreon-badge]: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dsciborrudnicki%26type%3Dpatrons\u0026style=flat\n[patreon-link]: https://patreon.com/sciborrudnicki\n\n[angulario]: https://angular.io\n[skeleton]: https://github.com/angular-package/skeleton\n\n\u003c!-- Update status --\u003e\n[experimental]: https://img.shields.io/badge/-Experimental-orange\n[fix]: https://img.shields.io/badge/-fix-red\n[new]: https://img.shields.io/badge/-new-green\n[update]: https://img.shields.io/badge/-update-red\n[inprogress]: https://img.shields.io/badge/-In%20progress-gray\n[documentation]: https://img.shields.io/badge/-Documentation-informational\n[demonstration]: https://img.shields.io/badge/-Demonstration-green\n\n\u003c!-- Discord --\u003e\n[discord-badge]: https://img.shields.io/discord/925168966098386944\n[discord-channel]: https://discord.com/channels/925168966098386944/925168966098386948\n\n\u003c!-- Gitter --\u003e\n[gitter-badge]: https://badges.gitter.im/angularpackage/Lobby.svg\n[gitter-chat]: https://gitter.im/angularpackage/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\n\n\u003c!-- Twitter --\u003e\n[twitter-badge]: https://img.shields.io/twitter/url?style=social\u0026label=Follow%20%40angularpackage\u0026url=https%3A%2F%2Ftwitter.com%2Fangularpackage\n[twitter-follow]: https://twitter.com/angularpackage\n\n\u003c!-- GIT --\u003e\n[git-semver]: http://semver.org/\n\n\u003c!-- GIT: commit --\u003e\n[git-commit-angular]: https://gist.github.com/stephenparish/9941e89d80e2bc58a153\n[git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html\n[git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/\n\n\u003c!-- This package: testing  --\u003e\n  \u003c!-- GitHub: badges --\u003e\n  [testing-badge-issues]: https://img.shields.io/github/issues/angular-package/testing\n  [testing-badge-forks]: https://img.shields.io/github/forks/angular-package/testing\n  [testing-badge-stars]: https://img.shields.io/github/stars/angular-package/testing\n  [testing-badge-license]: https://img.shields.io/github/license/angular-package/testing\n  \u003c!-- GitHub: badges links --\u003e\n  [testing-issues]: https://github.com/angular-package/testing/issues\n  [testing-forks]: https://github.com/angular-package/testing/network\n  [testing-license]: https://github.com/angular-package/testing/blob/master/LICENSE\n  [testing-stars]: https://github.com/angular-package/testing/stargazers\n\u003c!-- This package --\u003e\n\n\u003c!-- Package: callback --\u003e\n  \u003c!-- npm --\u003e\n  [callback-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcallback.svg\n  [callback-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcallback.png\n  [callback-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcallback\n  [callback-npm-readme]: https://www.npmjs.com/package/@angular-package/callback#readme\n\n  \u003c!-- GitHub --\u003e\n  [callback-github-readme]: https://github.com/angular-package/callback#readme\n\n  [package-callback-resultcallback]: https://github.com/angular-package/callback#resultcallback\n\n\u003c!-- Package: change-detection --\u003e\n  \u003c!-- npm --\u003e\n  [cd-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.svg\n  [cd-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.png\n  [cd-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fchange-detection\n  [cd-npm-readme]: https://www.npmjs.com/package/@angular-package/change-detection#readme\n\n  \u003c!-- GitHub --\u003e\n  [cd-github-readme]: https://github.com/angular-package/change-detection#readme\n\n\u003c!-- Package: component-loader --\u003e\n  \u003c!-- npm --\u003e\n  [cl-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.svg\n  [cl-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.png\n  [cl-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader\n  [cl-npm-readme]: https://www.npmjs.com/package/@angular-package/component-loader#readme\n\n  \u003c!-- GitHub --\u003e\n  [cl-github-readme]: https://github.com/angular-package/component-loader#readme\n\n\u003c!-- Package: core --\u003e\n  \u003c!-- npm --\u003e\n  [core-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcore.svg\n  [core-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcore.png\n  [core-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcore\n  [core-npm-readme]: https://www.npmjs.com/package/@angular-package/core#readme\n\n  \u003c!-- GitHub --\u003e\n  [core-github-readme]: https://github.com/angular-package/core#readme\n\n\u003c!-- Package: error --\u003e\n  \u003c!-- npm --\u003e\n  [error-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ferror.svg\n  [error-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ferror.png\n  [error-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ferror\n  [error-npm-readme]: https://www.npmjs.com/package/@angular-package/error#readme\n\n  \u003c!-- GitHub --\u003e\n  [error-github-readme]: https://github.com/angular-package/error#readme\n\n\u003c!-- Package: indexeddb --\u003e\n  \u003c!-- npm --\u003e\n  [indexeddb-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Findexeddb.svg\n  [indexeddb-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Findexeddb.png\n  [indexeddb-npm-badge]: https://badge.fury.io/js/%40angular-package%2Findexeddb\n  [indexeddb-npm-readme]: https://www.npmjs.com/package/@angular-package/indexeddb#readme\n\n  \u003c!-- GitHub --\u003e\n  [indexeddb-github-readme]: https://github.com/angular-package/indexeddb#readme\n\n\u003c!-- Package: name --\u003e\n  \u003c!-- npm --\u003e\n  [name-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fname.svg\n  [name-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fname.png\n  [name-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fname\n  [name-npm-readme]: https://www.npmjs.com/package/@angular-package/name#readme\n\n  \u003c!-- GitHub --\u003e\n  [name-github-readme]: https://github.com/angular-package/name#readme\n\n\u003c!-- Package: preferences --\u003e\n  \u003c!-- npm --\u003e\n  [preferences-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fpreferences.svg\n  [preferences-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fpreferences.png\n  [preferences-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fpreferences\n  [preferences-npm-readme]: https://www.npmjs.com/package/@angular-package/preferences#readme\n\n  \u003c!-- GitHub --\u003e\n  [preferences-github-readme]: https://github.com/angular-package/preferences#readme\n\n\u003c!-- Package: prism --\u003e\n  \u003c!-- npm --\u003e\n  [prism-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fprism.svg\n  [prism-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fprism.png\n  [prism-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fprism\n  [prism-npm-readme]: https://www.npmjs.com/package/@angular-package/prism#readme\n\n  \u003c!-- GitHub --\u003e\n  [prism-github-readme]: https://github.com/angular-package/prism#readme\n\n\u003c!-- Package: property --\u003e\n  \u003c!-- npm --\u003e\n  [property-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fproperty.svg\n  [property-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fproperty.png\n  [property-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fproperty\n  [property-npm-readme]: https://www.npmjs.com/package/@angular-package/property#readme\n\n  \u003c!-- GitHub --\u003e\n  [property-github-readme]: https://github.com/angular-package/property#readme\n\n\u003c!-- Package: range --\u003e\n  \u003c!-- npm --\u003e\n  [range-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Frange.svg\n  [range-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Frange.png\n  [range-npm-badge]: https://badge.fury.io/js/%40angular-package%2Frange\n  [range-npm-readme]: https://www.npmjs.com/package/@angular-package/range#readme\n\n  \u003c!-- GitHub --\u003e\n  [range-github-readme]: https://github.com/angular-package/range#readme\n\n\u003c!-- Package: reactive --\u003e\n  \u003c!-- npm --\u003e\n  [reactive-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Freactive.svg\n  [reactive-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Freactive.png\n  [reactive-npm-badge]: https://badge.fury.io/js/%40angular-package%2Freactive\n  [reactive-npm-readme]: https://www.npmjs.com/package/@angular-package/reactive#readme\n\n  \u003c!-- GitHub --\u003e\n  [reactive-github-readme]: https://github.com/angular-package/reactive#readme\n\n\u003c!-- Package: sass --\u003e\n  \u003c!-- npm --\u003e\n  [sass-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass.svg\n  [sass-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass.png\n  [sass-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass\n  [sass-npm-readme]: https://www.npmjs.com/package/@angular-package/sass#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-github-readme]: https://github.com/angular-package/sass#readme\n\n\u003c!-- Package: sass-list --\u003e\n  \u003c!-- npm --\u003e\n  [sass-list-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-list.svg\n  [sass-list-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-list.png\n  [sass-list-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-list\n  [sass-list-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-list#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-list-github-readme]: https://github.com/angular-package/sass-string#readme\n\n\u003c!-- Package: sass-string --\u003e\n  \u003c!-- npm --\u003e\n  [sass-string-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-string.svg\n  [sass-string-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-string.png\n  [sass-string-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-string\n  [sass-string-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-string#readme\n\n  \u003c!-- GitHub --\u003e\n  [sass-string-github-readme]: https://github.com/angular-package/sass-string#readme\n\n\u003c!-- Package: spectre.css --\u003e\n  \u003c!-- npm --\u003e\n  [spectrecss-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.svg\n  [spectrecss-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.png\n  [spectrecss-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fspectre.css\n  [spectrecss-npm-readme]: https://www.npmjs.com/package/@angular-package/spectre.css#readme\n\n  \u003c!-- GitHub --\u003e\n  [spectrecss-github-readme]: https://github.com/angular-package/spectre.css#readme\n\n\u003c!-- Package: storage --\u003e\n  \u003c!-- npm --\u003e\n  [storage-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fstorage.svg\n  [storage-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fstorage.png\n  [storage-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fstorage\n  [storage-npm-readme]: https://www.npmjs.com/package/@angular-package/storage#readme\n\n  \u003c!-- GitHub --\u003e\n  [storage-github-readme]: https://github.com/angular-package/storage#readme\n\n\u003c!-- Package: tag --\u003e\n  \u003c!-- npm --\u003e\n  [tag-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftag.svg\n  [tag-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftag.png\n  [tag-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftag\n  [tag-npm-readme]: https://www.npmjs.com/package/@angular-package/tag#readme\n\n  \u003c!-- GitHub --\u003e\n  [tag-github-readme]: https://github.com/angular-package/tag#readme\n\n\u003c!-- Package: testing --\u003e\n  \u003c!-- npm --\u003e\n  [testing-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftesting.svg\n  [testing-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftesting.png\n  [testing-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftesting\n  [testing-npm-readme]: https://www.npmjs.com/package/@angular-package/testing#readme\n\n  \u003c!-- GitHub --\u003e\n  [testing-github-readme]: https://github.com/angular-package/testing#readme\n  [testing-github-changelog]: https://github.com/angular-package/testing/blob/main/CHANGELOG.md\n\n\u003c!-- Package: text --\u003e\n  \u003c!-- npm --\u003e\n  [text-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftext.svg\n  [text-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftext.png\n  [text-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftext\n  [text-npm-readme]: https://www.npmjs.com/package/@angular-package/text#readme\n\n  \u003c!-- GitHub --\u003e\n  [text-github-readme]: https://github.com/angular-package/text#readme\n\n\u003c!-- Package: type --\u003e\n  \u003c!-- npm --\u003e\n  [type-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftype.svg\n  [type-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftype.png\n  [type-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftype\n  [type-npm-readme]: https://www.npmjs.com/package/@angular-package/type#readme\n\n  \u003c!-- GitHub --\u003e\n  [type-github-readme]: https://github.com/angular-package/type#readme\n\n  [package-type-key]: https://github.com/angular-package/type#key\n  [package-type-minmax]: https://github.com/angular-package/type#minmax\n  [package-type-resultcallback]: https://github.com/angular-package/type#resultcallback\n  [package-type-type]: https://github.com/angular-package/type#type\n  [package-type-types]: https://github.com/angular-package/type#types\n  [package-type-valueparser]: https://github.com/angular-package/type#valueparser\n\n\u003c!-- Package: ui --\u003e\n  \u003c!-- npm --\u003e\n  [ui-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fui.svg\n  [ui-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fui.png\n  [ui-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fui\n  [ui-npm-readme]: https://www.npmjs.com/package/@angular-package/ui#readme\n\n  \u003c!-- GitHub --\u003e\n  [ui-github-readme]: https://github.com/angular-package/ui#readme\n\n\u003c!-- Package: wrapper --\u003e\n  \u003c!-- npm --\u003e\n  [wrapper-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fwrapper.svg\n  [wrapper-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fwrapper.png\n  [wrapper-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fwrapper\n  [wrapper-npm-readme]: https://www.npmjs.com/package/@angular-package/wrapper#readme\n\n  \u003c!-- GitHub --\u003e\n  [wrapper-github-readme]: https://github.com/angular-package/wrapper#readme\n\n\u003c!-- Angular --\u003e\n[angular-component-factory-resolver]: https://angular.io/api/core/ComponentFactoryResolver\n[angular-view-container-ref]: https://angular.io/api/core/ViewContainerRef\n\n\u003c!-- Jasmine --\u003e\n[jasmine]: https://jasmine.github.io/api/3.9\n[jasmine-beforeeach]: https://jasmine.github.io/api/3.9/global.html#beforeEach\n[jasmine-describe]: https://jasmine.github.io/api/3.8/global.html#describe\n[jasmine-expect]: https://jasmine.github.io/api/3.8/global.html#expect\n[jasmine-it]: https://jasmine.github.io/api/3.8/global.html#it\n[jasmine-matchers]: https://jasmine.github.io/api/3.9/matchers.html\n\n\u003c!-- Javascript  --\u003e\n[js-array]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array\n[js-array-every]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/every\n[js-array-some]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some\n\n[js-bigint]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt\n[js-bigintconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt\n\n[js-boolean]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n[js-booleanconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean/Boolean\n\n[js-classes]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes\n\n[js-date]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date\n\n[js-error]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n\n[js-function]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Functions\n[js-rest-parameter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/rest_parameters\n\n[js-getter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get\n[js-object-getownpropertydescriptor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptor\n[js-object-getOwnpropertydescriptors]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors\n\n[js-setter]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set\n\n[js-hasownproperty]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty\n\n[js-instanceof]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof\n[js-in-operator]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in\n\n[js-map]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map\n\n[js-null]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null\n[js-number]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number\n[js-numberconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/Number\n\n[js-object]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object\n[js-object-define-property]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty\n\n[js-primitive]: https://developer.mozilla.org/en-US/docs/Glossary/Primitive\n[js-promise]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise\n\n[js-rangeerror]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError\n[js-referenceerror]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ReferenceError\n[js-regexp]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n\n[js-set]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set\n[js-static]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static\n[js-storage]: https://developer.mozilla.org/en-US/docs/Web/API/Storage\n[js-string]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String\n[js-stringconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/String\n\n[js-symbol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol\n[js-symbolconstructor]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol\n[js-syntaxerror]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError\n\n[js-typeerror]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError\n\n[js-undefined]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined\n[js-urlerror]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/URIError\n\n[js-weakset]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet\n\n\u003c!-- Karma --\u003e\n[karma]: http://karma-runner.github.io/0.10/index.html\n\n\u003c!-- Prism --\u003e\n[prism-js]: https://prismjs.com/\n\n\u003c!-- Typescript --\u003e\n[ts-any]: https://www.typescriptlang.org/docs/handbook/basic-types.html#any\n[ts-boolean]: https://www.typescriptlang.org/docs/handbook/basic-types.html#boolean\n[ts-classes]: https://www.typescriptlang.org/docs/handbook/2/classes.html\n[ts-enums]: https://www.typescriptlang.org/docs/handbook/enums.html\n[ts-function]: https://www.typescriptlang.org/docs/handbook/2/functions.html\n[ts-interface]: https://www.typescriptlang.org/docs/handbook/interfaces.html#our-first-interface\n[ts-never]: https://www.typescriptlang.org/docs/handbook/basic-types.html#never\n[ts-null]: https://www.typescriptlang.org/docs/handbook/basic-types.html#null-and-undefined\n[ts-number]: https://www.typescriptlang.org/docs/handbook/basic-types.html#number\n[ts-object]: https://www.typescriptlang.org/docs/handbook/basic-types.html#object\n[ts-string]: https://www.typescriptlang.org/docs/handbook/basic-types.html#string\n[ts-undefined]: https://www.typescriptlang.org/docs/handbook/basic-types.html#null-and-undefined\n[ts-unknown]: https://www.typescriptlang.org/docs/handbook/basic-types.html#unknown\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-package%2Ftesting","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangular-package%2Ftesting","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangular-package%2Ftesting/lists"}