Mar*_*kus 5 unit-testing typescript jestjs nestjs
我的 NestJs 应用程序中有一个简单的控制器。
@Post('/')
async create(@Body() createUserRequest: CreateUserRequest): Promise<User> {
return await this.userService.create(createUserRequest);
}
Run Code Online (Sandbox Code Playgroud)
我的目标是使用笑话来测试这个功能。正如您所看到的,控制器注入了一个UserService. 所以我尝试在单元测试中模拟此服务。测试用例如下所示。
describe('User Controller', () => {
let userService: UserService;
let userController: UserController;
beforeEach(async () => {
const module = await Test.createTestingModule({
controllers: [UserController],
providers: [UserService],
}).compile();
userService = module.get<UserService>(UserService);
userController = module.get<UserController>(UserController);
});
describe('create', () => {
it('should return a user', async () => {
const result = new User();
jest.spyOn(userService, 'create').mockImplementation(() => result);
expect(await userController.create(new CreateUserRequest())).toBe(result);
});
});
});
Run Code Online (Sandbox Code Playgroud)
我的问题是,jest.spyOn模拟发生的地方会产生错误。
No overload matches this call.
Overload 1 of 4, '(object: UserService, method: never): SpyInstance<never, never>', gave the following error.
Argument of type '"create"' is not assignable to parameter of type 'never'.
Overload 2 of 4, '(object: UserService, method: never): SpyInstance<never, never>', gave the following error.
Argument of type '"create"' is not assignable to parameter of type 'never'.
Run Code Online (Sandbox Code Playgroud)
有人知道我的模拟有什么问题吗?我从文档中采用了这种方法。
小智 0
这可能不是您期望的响应,但是,您可以实现相同的结果,如下所示:
// ...
describe('create', () => {
it('should return a user', async () => {
const result = new User();
((userService as unknown) as any).create = jest.fn().mockResolvedValue(result);
// Or to ensure that the value is only called once,
// go ahead and use 'mockResolvedValueOnce'
expect(await userController.create(new CreateUserRequest())).toBe(result);
});
});
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12457 次 |
| 最近记录: |