根据documentation,我们可以在测试模块中使用提供程序来提供我们仓库的模拟版本。我最终将这段代码用于测试:
describe('UserController', () => {
let userController: UserController
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [UserController],
providers: [
UserService,
{
provide: getRepositoryToken(User),
useValue: {
//
// Trying everything here
getUsers: () => {
return Promise.resolve(['user1', 'user2'])
},
find: () => {
return Promise.resolve(['user1', 'user2'])
},
findAll: () => {
return Promise.resolve(['user1', 'user2'])
},
//
},
},
],
}).compile()
userController = app.get<UserController>(UserController)
})
describe('root', () => {
it('should return Users', () => {
expect(userController.getUsers()).toEqual(['user1', 'user2'])
})
})
})
控制器/存储库非常简单:
@Controller()
export class UserController {
constructor(private readonly userService: UserService) {}
@Get()
async getUsers(): Promise<User[]> {
return this.userService.findAll()
}
@Post()
addNewUser(@Body() user: Partial<User>): Promise<number> {
return this.userService.create(user)
}
}
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private usersRepository: Repository<User>
) {}
findAll(): Promise<User[]> {
return this.usersRepository.find()
}
findOne(id: string): Promise<User> {
return this.usersRepository.findOne(id)
}
async remove(id: string): Promise<void> {
await this.usersRepository.delete(id)
}
async create(user: Partial<User>): Promise<number> {
return (await this.usersRepository.save(user)).id
}
}
运行测试时,userController.getUsers()
返回一个空对象:
● UserController › root › should return Users
expect(received).toEqual(expected) // deep equality
Expected: ["user1", "user2"]
Received: {}
38 | describe('root', () => {
39 | it('should return Users', () => {
> 40 | expect(userController.getUsers()).toEqual(['user1', 'user2'])
| ^
41 | })
42 | })
43 | })
at Object.<anonymous> (user/user.controller.spec.ts:40:41)
可能是什么问题?
答案 0 :(得分:0)
问题很傻-getUsers
返回了一个承诺,所以我不得不做这样的事情:
describe('root', () => {
it('should return Users', async () => {
const res = await userController.getUsers()
expect(res).toEqual(['user1', 'user2'])
})
})