/
githubmirror
/
nest
Обзор
Документация
Войти
/
githubmirror
/
nest
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
packages/microservices/test/client/client-proxy.spec.ts
182 строки
5 KB
Kamil Myśliwiec
feat(microservices): add status, unwrap, on, and other features
15 ноя 2024, 12:03
Не верифицирован
15 ноя 2024, 12:03
3dfc7fc
Код
Авторство
О чём код?
import { expect } from 'chai'; import { Observable } from 'rxjs'; import * as sinon from 'sinon'; import { ClientProxy } from '../../client/client-proxy'; import { ReadPacket } from '../../interfaces'; class TestClientProxy extends ClientProxy { protected async dispatchEvent<T = any>( packet: ReadPacket<any>, ): Promise<any> {} public async connect() { return Promise.resolve(); } public unwrap<T>(): T { throw new Error('Method not implemented.'); } public publish(pattern, callback): any {} public async close() {} } describe('ClientProxy', function () { this.retries(10); let client: TestClientProxy; beforeEach(() => { client = new TestClientProxy(); }); describe('createObserver', () => { describe('returned function calls', () => { it(`"error" when first parameter is not null or undefined`, () => { const testClient = new TestClientProxy(); const err = 'test'; const error = sinon.spy(); const next = sinon.spy(); const complete = sinon.spy(); const observer = { error, next, complete, }; const fn = testClient['createObserver'](observer); fn({ err }); expect(error.calledWith(err)).to.be.true; }); it(`"next" when first parameter is null or undefined`, () => { const testClient = new TestClientProxy(); const data = 'test'; const error = sinon.spy(); const next = sinon.spy(); const complete = sinon.spy(); const observer = { error, next, complete, }; const fn = testClient['createObserver'](observer); fn({ response: data }); expect(next.calledWith(data)).to.be.true; }); it(`"complete" when third parameter is true`, () => { const testClient = new TestClientProxy(); const data = 'test'; const error = sinon.spy(); const next = sinon.spy(); const complete = sinon.spy(); const observer = { error, next, complete, }; const fn = testClient['createObserver'](observer); fn({ data, isDisposed: true } as any); expect(complete.called).to.be.true; }); }); }); describe('send', () => { it(`should return an observable stream`, () => { const stream$ = client.send({}, ''); expect(stream$ instanceof Observable).to.be.true; }); it('should call "connect" on subscribe', () => { const connectSpy = sinon.spy(client, 'connect'); const stream$ = client.send({ test: 3 }, 'test'); stream$.subscribe(); expect(connectSpy.calledOnce).to.be.true; }); describe('when "connect" throws', () => { it('should return Observable with error', () => { sinon.stub(client, 'connect').callsFake(() => { throw new Error(); }); const stream$ = client.send({ test: 3 }, 'test'); stream$.subscribe({ next: () => {}, error: err => { expect(err).to.be.instanceof(Error); }, }); }); }); describe('when is connected', () => { beforeEach(() => { sinon.stub(client, 'connect').callsFake(() => Promise.resolve()); }); it(`should call "publish"`, () => { const pattern = { test: 3 }; const data = 'test'; const publishSpy = sinon.spy(); const stream$ = client.send(pattern, data); client.publish = publishSpy; stream$.subscribe(() => { expect(publishSpy.calledOnce).to.be.true; }); }); }); it('should return Observable with error', () => { const err$ = client.send(null, null); expect(err$).to.be.instanceOf(Observable); }); }); describe('emit', () => { it(`should return an observable stream`, () => { const stream$ = client.emit({}, ''); expect(stream$ instanceof Observable).to.be.true; }); it('should call "connect" immediately', () => { const connectSpy = sinon.spy(client, 'connect'); client.emit({ test: 3 }, 'test'); expect(connectSpy.calledOnce).to.be.true; }); describe('when "connect" throws', () => { it('should return Observable with error', () => { sinon.stub(client, 'connect').callsFake(() => { throw new Error(); }); const stream$ = client.emit({ test: 3 }, 'test'); stream$.subscribe({ next: () => {}, error: err => { expect(err).to.be.instanceof(Error); }, }); }); }); describe('when is connected', () => { beforeEach(() => { sinon.stub(client, 'connect').callsFake(() => Promise.resolve()); }); it(`should call "dispatchEvent"`, () => { const pattern = { test: 3 }; const data = 'test'; const dispatchEventSpy = sinon .stub() .callsFake(() => Promise.resolve(true)); const stream$ = client.emit(pattern, data); client['dispatchEvent'] = dispatchEventSpy; stream$.subscribe(() => { expect(dispatchEventSpy.calledOnce).to.be.true; }); }); }); it('should return Observable with error', () => { const err$ = client.emit(null, null); expect(err$).to.be.instanceOf(Observable); }); }); });