[英]TypeError: Cannot read property 'then' of undefined Jest and Nest
我正在嘗試為我的 NestJS API 編寫一個單元測試,但是當我嘗試在我的服務 class 中模擬一個方法時,我得到了這個TypeError: Cannot read property 'then' of undefined
error。 你能解釋一下我的代碼有什么問題嗎?
服務:
async userExist(data: User): Promise<boolean> {
return new Promise((resolve, reject) => {
this.usereRepository
.findOne({
where: {
name: data.name,
},
})
.then((res) => {
if (!res) {
resolve(false);
}
resolve(true);
})
.catch((err) => {
reject(err);
});
});
}
async createUser(data: User): Promise<User> {
return new Promise((resolve, reject) => {
this.userExist(data).then((exist) => {
if (exist) {
return reject('User already exist');
}
this.userRepository
.save(data)
.then((res) => {
resolve(res);
})
.catch((err) => {
reject(err);
});
});
});
}
服務測試:
it('should create a new user without error', async () => {
jest
.spyOn(service, 'userExist')
.mockImplementation(() => Promise.resolve(false));
await service.createUser(data);
expect(userRepository.save).toHaveBeenCalled();
});
我不知道這是否有幫助,但我將beforeEach
放在我模擬我的save
和findOne
數據庫函數的地方。
let service: UserService;
let userRepository: Repository<User>;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [
UserService,
{
provide: getRepositoryToken(User),
useValue: {
save: jest.fn(),
findOne: jest.fn(),
},
},
],
}).compile();
service = module.get<UserService>(UserService);
userRepository = module.get<Repository<User>>(
getRepositoryToken(User)
);
});
錯誤跟蹤
TypeError: Cannot read property 'then' of undefined
64 | if (exist) {
65 | return reject('User already exist');
> 66 | }
| ^
67 | this.userRepository
68 | .save(data)
69 | .then((res) => {
那是因為save()
不是async function,改成這樣:
{
provide: getRepositoryToken(User),
useValue: {
save: jest.fn().mockResolvedValue('user_object'),
findOne:jest.fn().mockResolvedValue('user_object'),
},
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.