我正在尝试使用 NestJs 框架创建 Jest 测试。
测试应检查 Controller 和服务,但是 1) Controller 未定义,2) 服务未定义。
这是我的home-cards.controller.spec.ts中的代码:
describe('HomeCardsController', () => {
let homeCardsController: HomeCardsController;
let homeCardsService: HomeCardsService;
beforeEach(async () => {
const module = await Test.createTestingModule({
imports: [TypeOrmModule.forFeature([HomeCard])],
controllers: [HomeCardsController],
providers: [HomeCardsService]
}).compile();
homeCardsController = module.get<HomeCardsController>(HomeCardsController);
homeCardsService = module.get<HomeCardsService>(HomeCardsService);
});
describe('findall', () => {
it('should return an array of home cards', async () => {
expect( await homeCardsController.findAll(1000)).toBeInstanceOf(Array);
});
});
});
错误:
Controller 请求用户的新错误:
TypeError: Cannot read property 'clientId' of undefined
17 | async findAll(@Req() request): Promise<HomeCard[]> {
18 | const user: AuthUser = request.user;
> 19 | return await this.homeCardsService.findAll(user.clientId);
| ^
20 | }
21 |
22 | @Get(":id")
最佳答案
您必须模拟调用 HomeCardsController 的 HomeCardsService 方法
import { HomeCardService } from './home-cards.service.ts'; // your path to service
jest.mock('./home-cards.service.ts'); // your path to service
describe('HomeCardsController', () => {
let homeCardsController: HomeCardsController;
let homeCardsService: HomeCardsService;
beforeEach(async () => {
const module = await Test.createTestingModule({
// imports: [TypeOrmModule.forFeature([HomeCard])], <- unit test don't need database, mock all
controllers: [HomeCardsController],
providers: [HomeCardsService]
}).compile();
homeCardsController = module.get<HomeCardsController>(HomeCardsController);
homeCardsService = module.get<HomeCardsService>(HomeCardsService);
});
describe('findall', () => {
it('should return an array of home cards', async () => {
const result = []; // some result for mock method
jest.spyOn(homeCardsService, 'findAll').mockImplementation(() => result);
const request = {user: {clientId: 1000}}
expect( await homeCardsController.findAll(request)).toBeInstanceOf(Array);
});
});
});
关于testing - 试图用 Jest 测试我的嵌套 api,返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55966601/