Angular Mocking Service с множественной подписью

В моем проекте Angular все службы Rest определены, как показано ниже, у них есть 4 подписи.

public commandsGet(oem: string, countryCode?: string, observe?: 'body', reportProgress?: boolean): Observable<CommandGetResponse>;
    public commandsGet(oem: string, countryCode?: string, observe?: 'response', reportProgress?: boolean): Observable<HttpResponse<CommandGetResponse>>;
    public commandsGet(oem: string, countryCode?: string, observe?: 'events', reportProgress?: boolean): Observable<HttpEvent<CommandGetResponse>>;
    public commandsGet(oem: string, countryCode?: string, observe: any = 'body', reportProgress = false): Observable<any> {

        return this.httpClient.get<CommandGetResponse>(`${this.basePath}/${oem}/commands/`, params);
    }

Я пишу несколько тестов и пытаюсь имитировать службу, но получаю ошибку: «Аргумент типа Observable не может быть назначен параметру типа Observable<HttpEvent>»

it('should return expected commands', (done: DoneFn) => {
            const mockResponse: CommandGetResponse  = {
                data: [
                    { commandname: 'A' },
                    { commandname: 'B' }],
                count: 2
            };
           
            spyOn(commandService, 'commandsGet').and.returnValue(of(mockResponse) as Observable<CommandGetResponse>);
            component.ngOnInit();
            fixture.detectChanges();

            expect(component.commands).toEqual(mockResponse.data);
        });

я тоже пробовал


spyOn(commandService, 'commandsGet').and.returnValue(of(mockResponse));

``

Then I'm getting "Argument of type 'Observable<CommandGetResponse>' is not assignable to parameter of type 'Observable<HttpEvent<CommandGetResponse>>'.

Когда я определяю:

const httpResponse = new HttpResponse({ body: mockResponse });
spyOn(commandService, 'commandsGet').and.returnValue(of(httpResponse));

Я не получаю никаких ошибок, но мои тесты не удались, поскольку возвращаемый объект не относится к типу «CommandGetResponse».

Любая помощь в этом вопросе будет приветствоваться.

Спасибо

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для тестирования файлов не имеет особого значения, какие типы установлены, поэтому можно безопасно использовать any и просто сосредоточиться на тестировании и покрытии.

    it('should return expected commands', (done: DoneFn) => {
        const mockResponse: any = { // <- changed here!
            data: [
                { commandname: 'A' },
                { commandname: 'B' }],
            count: 2
        };
       
        spyOn<any>(commandService, 'commandsGet').and.returnValue(of(mockResponse) as any);// <- changed here!
        component.ngOnInit();
        fixture.detectChanges();

        expect(component.commands).toEqual(mockResponse.data);
    });

спасибо, это сработало. Я сделал();" на тесте...

Christèle Legeard 21.02.2024 09:52

Другие вопросы по теме