我知道之前有人问过这个问题,但是当我运行服务测试功能时,我在 nestjs 中遇到了这个错误
这是我的服务代码
用户服务.ts
import { Injectable,HttpException, HttpCode, HttpStatus } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
import { UserRegisterAC } from '../application/userRegisterAC';
@Injectable()
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>) {}
async allUsersList(): Promise<User[]> {
var users = this.userRepository.find();
if(users==null){
throw new HttpException("Users not found",HttpStatus.NOT_FOUND)
}else{
return users as unknown as User[];
}
}
async create(userDTO: UserRegisterAC): Promise<User> {
const user = new User();
user.name = userDTO.name;
user.phoneNo = userDTO.phoneNo;
return this.userRepository.save(user);
}
}
用户规范import { Test, TestingModule } from '@nestjs/testing';
import { UserService } from './user.service';
describe('UserService', () => {
let service: UserService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
providers: [UserService],
}).compile();
service = module.get<UserService>(UserService);
});
it('should return user array', async() => {
const result = [{id:1,name:'mayur',phoneNo:'9998814695'}];
// @ts-ignore
jest.spyOn(service,'allUsersList').mockImplementation(() => result);
expect(await service.allUsersList()).toBe(result);
});
});
在这个文件中,我想在返回用户数组的用户服务中测试 allUserlist 函数。用户实体包含 id、name 和 phoneNo。
当我运行测试时,我收到了类似的错误
Cannot spyOn on a primitive value; undefined given
17 | const result = [{id:1,name:'mayur',phoneNo:'9998814695'}];
18 | // @ts-ignore
> 19 | jest.spyOn(service,'allUsersList').mockImplementation(() => result);
| ^
20 | expect(await service.allUsersList()).toBe(result);
21 | });
22 | });
这是我的 Jest 配置{
"moduleFileExtensions": ["js", "json", "ts"],
"rootDir": ".",
"testEnvironment": "node",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"automock": true
}
我尝试了一切请给出一些建议
最佳答案
我注意到这里有几件事。
undefined
而不是一个类(class)。要解决此问题,您需要执行以下操作:
beforeEach(async () => {
const modRef = await Test.createTestingModle({
providers: [
UserService,
{
provide: getRepositoryToken(User),
useClass: Repository,
}
]
}).compile();
service = modRef.get(UserService);
repository = modRef.get<Repository<User>>(getREpositoryToken(User));
});
现在您可以模拟存储库方法,同时仍然使用该服务来测试覆盖率。有一个 more in depth answer here和 a repository full of test examples here .随意看看并深入一点。
关于node.js - 无法窥探原始值;在 nestJS 中给出未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62829590/