Я новичок в модульном тесте Мокко Синона. Это то, что я пытался получить ожидаемый результат. Но это выдает следующую ошибку.
AssertionError: ожидается, что заглушка будет вызвана с аргументами 201
Может кто-нибудь помочь мне с этим или любым предложением, если я делаю что-то не так.
async createUser(req: Request, res: Response, next: NextFunction) {
const { name, email, password } = req.body;
const user = new User({ name, email, password });
try {
const userCreated = await userService.createUserService(user);
res.status(201).json({ status: 201, data: userCreated });
} catch (err) {
next(httpErrors(500, err.message));
}
}
модульный тест для вышеперечисленного:
import sinon from "sinon";
import { Request, Response } from "express";
import userController from "./user.controller";
import UserService from "../services/user.service";
import User from "../models/user.model";
describe("UserController", () => {
let userService;
beforeEach(() => {
userService = new UserService();
});
it("should create user", async () => {
const mReq = {
body: {
name: "mockName",
email: "mockEmail",
password: "mockPassword#123"
}
} as Request;
const mRes = {
status: sinon.stub().returnsThis(),
json: sinon.stub()
} as any;
const mNext = sinon.stub();
const stubValue = {
name: "Deepesh"
};
const createUserServiceStub = sinon
.stub(userService, "createUserService")
.resolves(stubValue);
await userController.createUser(mReq, mRes, mNext);
sinon.assert.calledWithExactly(
createUserServiceStub,
new User({
name: "mockName",
email: "mockEmail",
password: "mockPassword#123"
})
);
sinon.assert.calledWithExactly(mRes.status, 201);
sinon.assert.calledWithExactly(mRes.json, {
status: 201,
data: { name: "StubName" }
});
});
});
user.service.ts
import User, { IUser } from "../models/user.model";
import HashPassword from "../utils/password";
class UserService {
private user;
constructor() {
this.user = User;
}
/**
* Function to check existence of user if not then create new user in db
* @param user
*/
public async createUserService(user: IUser): Promise<any> {
try {
// Check for existence of user in db
const userRecord = await this.user.findOne({ email: user.email });
if (userRecord) {
throw new Error("RECORD ALREADY EXISTS");
}
const encPwd = await HashPassword.encryptPassword(user.password); // Encrypt user entered password
user.password = encPwd;
user.role = "user";
const createdUser = await this.user.create(user); // create user
return createdUser;
} catch (error) {
throw error;
}
}
}
export default UserService;
Любая помощь будет очень признательна ..
Заранее спасибо.