nestjs - 在 Nest JS 中模拟存储库
问题描述
根据文档,我们可以在测试模块中使用提供者来提供我们 repo 的模拟版本。我最终得到了我的测试代码:
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)
可能是什么问题?
解决方案
这个问题很傻 -getUsers
返回一个承诺,所以我不得不做这样的事情:
describe('root', () => {
it('should return Users', async () => {
const res = await userController.getUsers()
expect(res).toEqual(['user1', 'user2'])
})
})
推荐阅读
- google-cloud-platform - 从在云运行中运行的管道访问云存储
- .htaccess - .htaccess CloudFlare 环境
- git-submodules - 影响子模块哈希的主仓库中的交互式变基
- python - 计算满足条件的滚动窗口上的唯一值
- pandas - 为什么熊猫数据框不需要完整的行值?
- html - 我想在标题下写一段
- html - CSS“宽度:适合内容;” 属性不好用。父元素有这个属性计算它的宽度小于它的内容
- rust - Rust .exe 无法在 Windows 上打开
- reactjs - React Fire on Change 事件加载
- c# - 导航到其他页面时出现未指定的异常