Skip to content

Commit

Permalink
Merge pull request #579 from matt1097/bug/578fix
Browse files Browse the repository at this point in the history
Bugfix for aliased providers
  • Loading branch information
kamilmysliwiec committed Aug 12, 2022
2 parents d44c63b + ce045e7 commit 5978c8c
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/event-subscribers.loader.ts
Expand Up @@ -45,7 +45,7 @@ export class EventSubscribersLoader
const providers = this.discoveryService.getProviders();
const controllers = this.discoveryService.getControllers();
[...providers, ...controllers]
.filter(wrapper => wrapper.instance)
.filter(wrapper => wrapper.instance && !wrapper.isAlias)
.forEach((wrapper: InstanceWrapper) => {
const { instance } = wrapper;
const prototype = Object.getPrototypeOf(instance) || {};
Expand Down
10 changes: 10 additions & 0 deletions tests/e2e/module-e2e.spec.ts
Expand Up @@ -8,6 +8,7 @@ import {
TEST_EVENT_STRING_PAYLOAD,
} from '../src/constants';
import { EventsControllerConsumer } from '../src/events-controller.consumer';
import { EventsProviderAliasedConsumer } from '../src/events-provider-aliased.consumer';
import { EventsProviderPrependConsumer } from '../src/events-provider-prepend.consumer';
import { EventsProviderConsumer } from '../src/events-provider.consumer';
import { EventsProviderRequestScopedConsumer } from '../src/events-provider.request-scoped.consumer';
Expand All @@ -31,6 +32,15 @@ describe('EventEmitterModule - e2e', () => {
expect(eventsConsumerRef.eventPayload).toEqual(TEST_EVENT_PAYLOAD);
});

it(`aliased providers should receive an event only once`, async () => {
const eventsConsumerRef = app.get(EventsProviderAliasedConsumer);
const eventSpy = jest.spyOn(eventsConsumerRef, 'eventPayload', 'set');
await app.init();

expect(eventSpy).toBeCalledTimes(1);
eventSpy.mockRestore();
});

it(`should emit a "test-event" event to controllers`, async () => {
const eventsConsumerRef = app.get(EventsControllerConsumer);
await app.init();
Expand Down
6 changes: 6 additions & 0 deletions tests/src/app.module.ts
@@ -1,6 +1,7 @@
import { Module } from '@nestjs/common';
import { EventEmitterModule } from '../../lib';
import { EventsControllerConsumer } from './events-controller.consumer';
import { EventsProviderAliasedConsumer } from './events-provider-aliased.consumer';
import { EventsProviderPrependConsumer } from './events-provider-prepend.consumer';
import { EventsProviderConsumer } from './events-provider.consumer';
import { EventsProviderRequestScopedConsumer } from './events-provider.request-scoped.consumer';
Expand All @@ -20,6 +21,11 @@ import { TestProvider } from './test-provider';
EventsProducer,
TestProvider,
EventsProviderRequestScopedConsumer,
EventsProviderAliasedConsumer,
{
provide: 'AnAliasedConsumer',
useExisting: EventsProviderAliasedConsumer,
},
],
})
export class AppModule {}
20 changes: 20 additions & 0 deletions tests/src/events-provider-aliased.consumer.ts
@@ -0,0 +1,20 @@
import { Injectable } from '@nestjs/common';
import { OnEvent } from '../../lib';

@Injectable()
export class EventsProviderAliasedConsumer {
private _eventPayload = {};

set eventPayload(value) {
this._eventPayload = value;
}

get eventPayload() {
return this._eventPayload;
}

@OnEvent('test.*')
onTestEvent(payload: Record<string, any>) {
this.eventPayload = payload;
}
}

0 comments on commit 5978c8c

Please sign in to comment.