这是我进入猫鼬方法的第一步。任何建议都非常感谢。 Mocha抱怨它找不到我的模型集合(在我的代码中是“ this.model('User'....”行)。)我正在使用sinon存根来存入模型和方法名称。
单元测试架构(验证器)进行得很好。我试图把头缠在一个简单的mongoose.method上。
猫鼬方法(猫鼬模式文件的底部):
userSchema.methods.findUser = (cb) => {
this.model('User').findOne({
lname: this.lname
}, (err, val) => {
cb(!!val);
});
};
module.exports = mongoose.model('User', userSchema);
我对此方法的测试:
it('gets a User', (done) => {
sinon.stub(User, 'findOne');
let u = new User({ lname: 'Pickles' });
u.findUser();
sinon.assert.calledWith(User.findOne, { lname: 'Pickles' });
done();
});
答案 0 :(得分:0)
在架构函数中,当您创建findUser函数时,请调用this.model('User')。findOne....。在代码中,此时尚未将UserSchema设为模型。这是在模式文件的底部完成的,在创建模型时将其导出。
这是您的问题,因为您试图在创建用户模型之前对其进行访问。但是让我问一下,为什么要在模型中编写此函数?此功能与模型交互,它无助于定义模型。我的建议是创建一个用户控制器,然后在其中导入模型,并在其中编写该功能。像这样:
const UserModel = require('your-model-here');
function findUser(last, cb) {
UserModel.findOne({ lname: last }, (err, val) => {
cb(!!val);
});
}