@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
JavaScript
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);
},
};
}