Nest JS - 为返回 Observable Axios Response 的函数编写 Jest 测试用例时出现问题

typescriptIOSJS

1个回答

写回答

鸡蛋切片

2025-09-15 03:45

+ 关注

JS
JS

使用 Jest 编写测试用例是我们开发过程中不可或缺的一部分。当我们在 Nest JS 中编写返回 Observable AxIOS Response 的函数时,我们希望能够对其进行测试,以确保它的正确性和稳定性。然而,由于 Observable 的异步特性,测试起来可能会有一些困难。在本文中,我们将讨论如何解决这个问题,并提供一些示例代码来说明如何编写这种类型的测试用例。

## 问题描述

在 Nest JS 中,我们经常会使用 AxIOS 来进行 HTTP 请求。为了更好地处理异步操作,我们可以使用 Observable 来处理 AxIOS 的返回结果。例如,我们可能有一个函数,它使用 AxIOS 发起 HTTP 请求,并返回一个 Observable。代码如下所示:

typescript

import { Injectable } from '@nestJS/common';

import { AxIOSResponse, AxIOSError } from 'axIOS';

import { Observable, throwError } from 'rxJS';

import { catchError, map } from 'rxJS/operators';

import axIOS from 'axIOS';

@Injectable()

export class HttpService {

public get(url: string): Observable<AxIOSResponse> {

return axIOS

.get(url)

.pipe(

map((response: AxIOSResponse) => response.data),

catchError((error: AxIOSError) => {

return throwError(error);

}),

);

}

}

这个函数使用 AxIOS 发起一个 GET 请求,并将返回结果进行处理,最后返回一个 Observable。在上面的代码中,我们使用了 mapcatchError 操作符来处理返回结果和错误。

## 测试用例

现在我们想要编写一个测试用例来测试这个函数的行为。我们希望能够验证函数是否正确地发起了 HTTP 请求,并正确地处理了返回结果和错误。为了做到这一点,我们可以使用 Jest 提供的一些特性来模拟 AxIOS 的行为,并对函数进行断言。

首先,我们需要安装一些必要的依赖项。我们可以使用以下命令来安装它们:

shell

npm install axIOS jest rxJS @types/jest @types/rxJS -D

接下来,我们可以编写一个测试用例来测试这个函数的行为。代码如下所示:

typescript

import { Test, TestingModule } from '@nestJS/testing';

import { HttpService } from './http.service';

import axIOS, { AxIOSResponse, AxIOSError } from 'axIOS';

import { Observable, throwError } from 'rxJS';

import { catchError, map } from 'rxJS/operators';

describe('HttpService', () => {

let httpService: HttpService;

beforeEach(async () => {

const module: TestingModule = awAIt Test.createTestingModule({

providers: [HttpService],

}).compile();

httpService = module.get<HttpService>(HttpService);

});

it('should make a GET request', (done) => {

const url = 'JSonplaceholder.typicode.com/posts/1';">https://JSonplaceholder.typicode.com/posts/1';</a>

const response: AxIOSResponse = {

data: {

id: 1,

title: 'sunt aut facere repellat provident occaecati excepturi optio reprehenderit',

body: 'quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit ' +

'molitia ut\nsint veniam\neaque aut autem',

userId: 1,

},

status: 200,

statusText: 'OK',

headers: {},

config: {},

};

jest.spyOn(axIOS, 'get').mockResolvedValue(response);

httpService.get(url).subscribe((result: AxIOSResponse) => {

expect(result).toEqual(response);

done();

});

});

it('should handle error', (done) => {

const url = 'https://JSonplaceholder.typicode.com/posts/999';

const error: AxIOSError = {

name: 'Error',

message: 'Request fAIled with status code 404',

isAxIOSError: true,

toJSON: jest.fn(),

config: {},

code: '404',

};

jest.spyOn(axIOS, 'get').mockRejectedValue(error);

httpService.get(url).subscribe(

() => {},

(err: AxIOSError) => {

expect(err).toEqual(error);

done();

},

);

});

});

在上面的代码中,我们首先创建了一个测试套件,并在 beforeEach 钩子中初始化了 HttpService。然后,我们编写了两个测试用例来分别测试函数是否正确地发起了 GET 请求,并正确地处理了返回结果和错误。在每个测试用例中,我们使用 jest.spyOn 来模拟 AxIOS 的行为,并使用 mockResolvedValuemockRejectedValue 来设置返回结果和错误。

## 运行测试

现在我们可以运行测试并查看结果了。我们可以使用以下命令来运行测试:

shell

npm test

如果一切正常,我们应该能够看到测试通过的输出。这意味着我们的函数在发送 HTTP 请求和处理返回结果和错误时表现良好。

##

在本文中,我们讨论了在 Nest JS 中编写返回 Observable AxIOS Response 的函数时如何编写 Jest 测试用例。我们了解了如何使用 Jest 提供的特性来模拟 AxIOS 的行为,并对函数进行断言。通过编写这些测试用例,我们可以验证函数的正确性和稳定性,从而提高代码的质量和可靠性。

希望这篇文章能帮助你更好地理解如何测试返回 Observable AxIOS Response 的函数,并在 Nest JS 项目中应用这些知识。祝你编写出高质量的测试用例!

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号