推荐答案
单元测试
在 NestJS 中,单元测试通常用于测试单个类或方法的行为。你可以使用 Jest 作为测试框架,NestJS 默认集成了 Jest。以下是一个简单的单元测试示例:
// www.javascriptcn.com code example
import { Test, TestingModule } from '@nestjs/testing';
import { MyService } from './my.service';
describe('MyService', () => {
let service: MyService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [MyService],
}).compile();
service = module.get<MyService>(MyService);
});
it('should be defined', () => {
expect(service).toBeDefined();
});
it('should return "Hello World"', () => {
expect(service.getHello()).toBe('Hello World');
});
});端到端测试
端到端测试用于测试整个应用程序的行为,通常从 HTTP 请求开始,直到返回响应。NestJS 提供了 @nestjs/testing 模块来帮助编写端到端测试。以下是一个简单的端到端测试示例:
// www.javascriptcn.com code example
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from './../src/app.module';
describe('AppController (e2e)', () => {
let app: INestApplication;
beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AppModule],
}).compile();
app = moduleFixture.createNestApplication();
await app.init();
});
afterAll(async () => {
await app.close();
});
it('/ (GET)', () => {
return request(app.getHttpServer())
.get('/')
.expect(200)
.expect('Hello World!');
});
});本题详细解读
单元测试
单元测试是测试单个类或方法的行为,确保它们在隔离环境中按预期工作。在 NestJS 中,你可以使用 Test.createTestingModule 方法来创建一个测试模块,然后通过 module.get 方法获取要测试的服务实例。你可以使用 Jest 提供的 describe、it 和 expect 等方法来定义测试用例和断言。
端到端测试
端到端测试是测试整个应用程序的行为,通常从 HTTP 请求开始,直到返回响应。在 NestJS 中,你可以使用 Test.createTestingModule 方法创建一个测试模块,并通过 createNestApplication 方法创建一个 NestJS 应用程序实例。然后,你可以使用 supertest 库来模拟 HTTP 请求,并验证响应是否符合预期。端到端测试通常用于测试控制器、中间件、过滤器等与 HTTP 请求相关的部分。