无法读取未定义的属性“模型”

时间:2019-01-27 05:32:20

标签: mongoose methods sinon

这是我进入猫鼬方法的第一步。任何建议都非常感谢。 Mocha抱怨它找不到我的模型集合(在我的代码中是“ this.model('User'....”行)。)我正在使用sinon存根来存入模型和方法名称。

单元测试架构(验证器)进行得很好。我试图把头缠在一个简单的mongoose.method上。

大声 code failure

猫鼬方法(猫鼬模式文件的底部):

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();
});

1 个答案:

答案 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);
  });
}