class import error when runing test with Jest

Discussão em 'Angular' iniciado por Imen MK, Setembro 11, 2024.

  1. Imen MK

    Imen MK Guest

    this is my first time i use Jest for testing so when I tried to run my unit test it fail because the import of communicationManagerService (actualy it call the coreManager.MessageSubject which is not used in my OutCallManager class)
    this is my class :

    import {Inject, Injectable} from '@nestjs/common';

    import {CommunicationManagerService} from 'package/communication-manager';
    import {ManagerLogger} from '../../common/logger';

    @Injectable()
    export class OutCallManager extends AbstractManager implements IOutCallManager {
    readonly className = 'OutCallManager';
    readonly logger = new ManagerLogger(this.className);

    @Inject()
    private readonly communicationManagerService: CommunicationManagerService;

    constructor(private context: ContextManagerService, private coreManagerService: CoreManagerService) {
    super(ServiceName.OutCall);
    }

    sendEmail(param: SendEmailInput): Observable<MessageHistoriqueContact> {
    const designation$ = param.clientId
    ? this.getClientDesignation(param.clientId, param.clientDesignation)
    : of(undefined);
    const communication$ = this.communicationManagerService.envoyerMail({
    to: param.emailAdress
    });
    return forkJoin([designation$, communication$]).pipe(
    switchMap(([designation, _com]) => {
    const historyEntry: MessageHistoriqueContact = {...};
    return this.historiqueContactService.postMessage(historyEntry);
    }),
    catchError((error) => this.throwError(error, 'sendEmail'))
    );
    }
    }


    this is my test class :

    import {Test} from '@nestjs/testing';
    import {OutCallManager} from './out-call.manager';
    import { CommunicationManagerService } from 'package/communication-manager';

    describe('OutCallManagerService', () => {
    let service: OutCallManager;
    const communicationManagerServiceMock = {};
    const coreManagerServiceMock = {};

    beforeEach(async () => {
    const moduleRef = await Test.createTestingModule({
    providers: [
    OutCallManager,

    {
    provide: CommunicationManagerService,
    useValue: communicationManagerServiceMock,
    },
    {
    provide: CoreManagerService,
    useValue: coreManagerServiceMock,
    },
    ]
    }).compile();
    service = moduleRef.get<OutCallManager>(OutCallManager);
    });

    describe('sendEmail', () => {
    it('should send email ', () => {
    const spyOnGetService = jest
    .spyOn(service, 'getService')
    .mockReturnValueOnce(histoContact)
    .mockReturnValueOnce(contacterSocle);
    const spyOnPostMessage = jest.spyOn(histoContact, 'postMessage').mockImplementation(() => of());
    const spyOnEnvoyerMail = jest.spyOn(contacterSocle, 'envoyerMail');
    const spyOnGetClientDesignation = jest.spyOn(service, 'getClientDesignation').mockReturnValue(of('designation'));
    const param: SendEmailInput = {
    emailAdress: '',
    clientId: '111111'
    };
    service.sendEmail(param).subscribe(() => {
    expect(spyOnGetService).toHaveBeenCalledTimes(2);
    expect(spyOnGetService).toHaveBeenCalledWith(SocfonMysysServiceName.HistoriqueContact);
    expect(spyOnGetService).toHaveBeenCalledWith(ServiceNameSocle.Communication);
    expect(spyOnPostMessage).toBeCalledTimes(1);
    });
    });}


    the error is TypeError: Test suite failed to run

    TypeError: coreManager.MessageSubject is not a function
    33 | IParamCreerEMailBandeauWOX
    34 | } from package/communication-common';
    > 35 | import {CommunicationManagerService} from 'package/communication-manager';
    | ^
    36 | import {ContextManagerService, CoreManagerService} from 'package/core-manager';


    i tried to mock coreManager.MessageSubject but it is not the solution

    Continue reading...

Compartilhe esta Página