【发布时间】:2021-11-01 11:20:18
【问题描述】:
我无法通过以下测试来更新用户信息
我正在使用nestjs btw 和typeorm
每当我记录结果时,属性都不会更新
users.service.ts
async update(id: string, updateUserDto: UpdateUserDto): Promise<User> {
const user = await this.usersRepository.findOne(id);
if (!user) throw new NotFoundException('user not found');
this.usersRepository.merge(user, updateUserDto);
await this.usersRepository.save(user);
return user;
}
users.service.spec.ts
it('should update user with new information', async () => {
const userPropertiesToUpdate = {
firstName: 'peter',
};
const updateUserDto = plainToClass(UpdateUserDto, userPropertiesToUpdate);
jest
.spyOn(repository, 'findOne')
.mockResolvedValue(plainToClass(User, UserMockFactory.build()));
jest
.spyOn(repository, 'merge')
.mockImplementation((user, updateUserDto) => {
return Object.assign({}, user, updateUserDto);
});
const result = await service.update(
'3b06c85a-698b-4410-bd31-b8b2990eec3a',
updateUserDto,
);
console.log(result);
});
users.repository.ts
@EntityRepository(User)
export class UsersRepository extends Repository<User> {}
user-mock.factory.ts
export class UserMockFactory {
public id = '3b06c85a-698b-4410-bd31-b8b2990eec3a';
public firstName = 'george';
public lastName = 'michael';
public email = 'george@email.com';
public password = 'asd123';
public createdAt = new Date();
public roles = [Role.User];
public resetToken = '';
public address = {
street: 'collins avenue',
number: 403,
city: 'miami',
district: 'florida',
};
public static build() {
return new UserMockFactory();
}
public static buildList(length: number) {
return Array(length)
.fill(0)
.map(() => this.build());
}
}
【问题讨论】:
-
this.usersRepository是从哪里来的?提供最小、完整的示例 -
抱歉现在更新了,当您从 typeorm 的存储库扩展时,您可以访问多种方法,例如保存、合并等...
标签: typescript testing jestjs typeorm