mirror of
https://github.com/nestjs/nest.git
synced 2026-02-21 15:08:37 +00:00
123 lines
4.2 KiB
TypeScript
123 lines
4.2 KiB
TypeScript
import {
|
|
DynamicModule,
|
|
FactoryProvider,
|
|
Injectable,
|
|
ValueProvider,
|
|
} from '@nestjs/common';
|
|
import { expect } from 'chai';
|
|
import * as sinon from 'sinon';
|
|
import { ClientProxyFactory } from '../../client';
|
|
import { Transport } from '../../enums';
|
|
import { ClientOptions } from '../../interfaces';
|
|
import { ClientsModule, ClientsModuleOptionsFactory } from '../../module';
|
|
|
|
describe('ClientsModule', () => {
|
|
let dynamicModule: DynamicModule;
|
|
describe('register', () => {
|
|
beforeEach(() => {
|
|
dynamicModule = ClientsModule.register([
|
|
{
|
|
name: 'test',
|
|
options: {},
|
|
},
|
|
]);
|
|
});
|
|
it('should return an expected module ref', () => {
|
|
expect(dynamicModule.module).to.be.eql(ClientsModule);
|
|
});
|
|
it('should return an expected providers array', () => {
|
|
const provider = dynamicModule.providers.find(
|
|
p => 'useValue' in p && p.provide === 'test',
|
|
) as ValueProvider;
|
|
expect(provider).to.not.be.undefined;
|
|
expect(provider.useValue).to.be.deep.eq(
|
|
ClientsModule['assignOnAppShutdownHook'](ClientProxyFactory.create({})),
|
|
);
|
|
});
|
|
});
|
|
describe('registerAsync', () => {
|
|
const useFactory = () => ({
|
|
options: {},
|
|
});
|
|
const registerOption = {
|
|
name: 'test',
|
|
useFactory,
|
|
};
|
|
|
|
it('should return an expected module ref', () => {
|
|
dynamicModule = ClientsModule.registerAsync([registerOption]);
|
|
expect(dynamicModule.module).to.be.eql(ClientsModule);
|
|
});
|
|
|
|
describe('when useFactory', () => {
|
|
it('should return an expected providers array with useFactory', () => {
|
|
dynamicModule = ClientsModule.registerAsync([registerOption]);
|
|
expect(dynamicModule.imports).to.be.deep.eq([]);
|
|
expect(dynamicModule.exports).to.be.eq(dynamicModule.providers);
|
|
expect(dynamicModule.providers).to.be.have.length(1);
|
|
|
|
const provider = dynamicModule.providers[0] as FactoryProvider;
|
|
expect(provider.provide).to.be.eql('test');
|
|
expect(provider.inject).to.be.deep.eq([]);
|
|
expect(provider.useFactory).to.be.an.instanceOf(Function);
|
|
});
|
|
});
|
|
|
|
describe('when useClass', () => {
|
|
it('should return an expected providers array with useClass', () => {
|
|
@Injectable()
|
|
class ClientOptionService implements ClientsModuleOptionsFactory {
|
|
createClientOptions(): Promise<ClientOptions> | ClientOptions {
|
|
return {
|
|
transport: Transport.TCP,
|
|
options: {},
|
|
};
|
|
}
|
|
}
|
|
const useClassOption = {
|
|
name: 'classTest',
|
|
useClass: ClientOptionService,
|
|
};
|
|
dynamicModule = ClientsModule.registerAsync([useClassOption]);
|
|
expect(dynamicModule.imports).to.be.deep.eq([]);
|
|
expect(dynamicModule.providers).to.be.have.length(2);
|
|
|
|
const classTestProvider = dynamicModule.providers[0] as FactoryProvider;
|
|
expect(classTestProvider.provide).to.be.eql('classTest');
|
|
expect(classTestProvider.inject).to.be.deep.eq([ClientOptionService]);
|
|
expect(classTestProvider.useFactory).to.be.an.instanceOf(Function);
|
|
});
|
|
it('provider should call "createClientOptions"', async () => {
|
|
const asyncOptions = {
|
|
useClass: Object,
|
|
};
|
|
const dynamicModule = ClientsModule.registerAsync([
|
|
asyncOptions as any,
|
|
]);
|
|
const optionsFactory = {
|
|
createClientOptions: sinon.spy(),
|
|
};
|
|
try {
|
|
await (dynamicModule.providers[0] as any).useFactory(optionsFactory);
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
expect(optionsFactory.createClientOptions.called).to.be.true;
|
|
});
|
|
});
|
|
|
|
describe('when useExisting', () => {
|
|
it('should provide an options', () => {
|
|
const asyncOptions = {
|
|
useExisting: Object,
|
|
};
|
|
dynamicModule = ClientsModule.registerAsync([asyncOptions as any]);
|
|
expect(dynamicModule.providers).to.have.length(1);
|
|
expect(dynamicModule.imports).to.be.deep.eq([]);
|
|
const classTestProvider = dynamicModule.providers[0] as FactoryProvider;
|
|
expect(classTestProvider.useFactory).to.be.an.instanceOf(Function);
|
|
});
|
|
});
|
|
});
|
|
});
|