Я пишу модульный тест для моего контроллера регистров, используя mocha и chai. Но я не могу получить доступ к функции save()
из моего контроллера, когда я использую заглушку. Любые предложения о том, как это сделать?
Я пытался напрямую использовать функцию save()
с контроллера регистра, но к ней не было доступа.
это мой тестовый код:
const register = require("../server/controllers/register");
var res = {
Name: "test",
Email: "abc@text.com",
MobileNumber: "",
Password: "text",
Wallet: 0
};
describe("function register() test", function() {
var userStub;
beforeEach(function() {
userStub = sinon.stub(register, "addUser").callsFake(function() {
return res;
});
});
afterEach(function() {
userStub.restore();
});
it("should accept user when all required fields are filled", function(done) {
register
.addUser({
Name: "test",
Email: "abc@text.com",
MobileNumber: "",
Password: "text"
})
.then(user => {
expect(user).to.equal(res);
done();
});
});
it("should give error when all fields are not filled", function(done) {
register
.addUser({
Name: "test",
Email: "abc@text.com",
MobileNumber: ""
})
.catch(function(err) {
var expectedErr = "user can't be registered , fill all fields";
expect(expectedErr).to.equal(err);
done();
});
});
});
код контроллера регистра:
// Require UserModel model in our routes module
var UserModel = require("../models/user");
// post function to register new user
var BCRYPT_SALT_ROUNDS = 10;
exports.addUser = (req, res) => {
const newUser = new UserModel({
Name: req.body.Name,
Email: req.body.Email,
MobileNumber: req.body.MobileNumber,
Password: req.body.Password
});
bcrypt
.hash(newUser.Password, BCRYPT_SALT_ROUNDS)
.then(function(hashedPassword) {
newUser.Password = hashedPassword;
return newUser.save().then(user => res.json(user));
})
.catch(error => {
console.log("Error saving user ", error);
res.status(400).send("user can't be registered , fill all fields");
});
};
ошибки, которые я получаю
1) function register()
тест
должен принять пользователя, когда все обязательные поля заполнены:
TypeError: register.addUser (...). Тогда не является функцией
2) function register()
тест
должен выдавать ошибку, когда все поля не заполнены:
TypeError: register.addUser (...). Catch не является функцией