san*_*ngh 7 javascript node.js jestjs nestjs
This is my controller class(usercontoller.ts) i am trying to write junit test cases for this class
import { UpsertUserDto } from '../shared/interfaces/dto/upsert-user.dto';
import { UserDto } from '../shared/interfaces/dto/user.dto';
import { UserService } from './user.service';
async updateUser(@BodyToClass() user: UpsertUserDto): Promise<UpsertUserDto> {
try {
if (!user.id) {
throw new BadRequestException('User Id is Required');
}
return await this.userService.updateUser(user);
} catch (e) {
throw e;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 TestClass(UserContollerspec.ts) 在运行我的测试类时出现错误“无法监视 updateUser 属性,因为它不是函数;而是给定了未定义。出现错误。但是,当我使用间谍On方法时,我不断收到 TypeError: Cannot读取未定义的属性“updateuser”:
*似乎 jest.spyOn() 在我犯错误的地方无法正常工作。有人可以帮助我吗?我正在传递的论点?
jest.mock('./user.service');
describe('User Controller', () => {
let usercontroller: UserController;
let userservice: UserService;
// let fireBaseAuthService: FireBaseAuthService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UserController],
providers: [UserService]
}).compile();
usercontroller = module.get<UserController>(UserController);
userservice = module.get<UserService>(UserService);
});
afterEach(() => {
jest.resetAllMocks();
});
describe('update user', () => {
it('should return a user', async () => {
//const result = new UpsertUserDto();
const testuser = new UpsertUserDto();
const mockDevice = mock <Promise<UpsertUserDto>>();
const mockNumberToSatisfyParameters = 0;
//const userservice =new UserService();
//let userservice: UserService;
jest.spyOn(userservice, 'updateUser').mockImplementation(() => mockDevice);
expect(await usercontroller.updateUser(testuser)).toBe(mockDevice);
it('should throw internal error if user not found', async (done) => {
const expectedResult = undefined;
****jest.spyOn(userservice, 'updateUser').mockResolvedValue(expectedResult);****
await usercontroller.updateUser(testuser)
.then(() => done.fail('Client controller should return NotFoundException error of 404 but did not'))
.catch((error) => {
expect(error.status).toBe(503);
expect(error.message).toMatchObject({error: 'Not Found', statusCode: 503}); done();
});
});
});
});
Run Code Online (Sandbox Code Playgroud)
您的类很可能UserService具有其他依赖项,因此 Nest 无法实例化该类UserService。当您尝试执行此操作时,userService = module.get(UserService)您会检索到undefined有关 的错误jest.spyOn()。在单元测试中,您应该提供一个模拟提供程序来代替实际提供程序,如下所示:
describe("User Controller", () => {
let usercontroller: UserController;
let userservice: UserService;
// let fireBaseAuthService: FireBaseAuthService;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [UserController],
providers: [
{
provide: UserService,
useValue: {
updateUser: jest.fn(),
// other UserService methods
}
}
],
}).compile();
usercontroller = module.get<UserController>(UserController);
userservice = module.get<UserService>(UserService);
});
// rest of tests
});
Run Code Online (Sandbox Code Playgroud)
现在,当您检索时,UserService您将拥有一个具有适当功能的对象,然后可以对其进行jest.spyOn编辑和模拟
| 归档时间: |
|
| 查看次数: |
24307 次 |
| 最近记录: |