UNPKG

@suites/unit

Version:

<p align="center"> <img width="200" src="https://raw.githubusercontent.com/suites-dev/suites/master/logo.png" alt="Logo" /> </p>

52 lines (51 loc) 2.44 kB
import * as console from 'console'; import { SuitesError, SuitesErrorCode } from '@suites/types.common'; import { UnitMocker } from '@suites/core.unit'; import { PackageResolver } from './package-resolver'; export class AdapterNotFoundError extends SuitesError { constructor(message) { super(SuitesErrorCode.ADAPTER_NOT_FOUND, 'No compatible adapter found', message); this.name = 'AdapterNotFoundError'; } } export const SuitesDoublesAdapters = { jest: '@suites/doubles.jest', sinon: '@suites/doubles.sinon', vitest: '@suites/doubles.vitest', bun: '@suites/doubles.bun', deno: '@suites/doubles.deno', node: '@suites/doubles.node', }; export const SuitesDIAdapters = { nestjs: '@suites/di.nestjs', inversify: '@suites/di.inversify', tsyringe: '@suites/di.tsyringe', }; export function testBedBuilderFactory(diAdapters, doublesAdapters, targetClass) { return { create: (testbedBuilderType) => { const diPackageResolver = new PackageResolver(diAdapters); const diAdapter = diPackageResolver .resolveCorrespondingAdapter() .then((adapter) => adapter) .catch(() => { throw new AdapterNotFoundError(`It seems that there is an issue with the adapter package needed to integrate Suites with your dependency injection framework. To resolve this issue, please install the correct Suites adapter package that is compatible with your dependency injection framework. For more details, refer to our docs website: https://suites.dev/docs`); }); const doublesPackageResolver = new PackageResolver(doublesAdapters); const doublesAdapter = doublesPackageResolver .resolveCorrespondingAdapter() .then((adapter) => adapter) .catch(() => { throw new AdapterNotFoundError(`It seems that there is an issue with the adapter package needed to integrate Suites with your mocking library. To resolve this issue, please install the correct Suites adapter package that is compatible with mocking library. For more details, refer to our docs website: https://suites.dev/docs`); }); const unitMocker = new UnitMocker(doublesAdapter.then((adapter) => adapter.mock), diAdapter); return new testbedBuilderType(doublesAdapter, unitMocker, targetClass, console); }, }; }