【问题标题】:Cant read property 'model' of undefined无法读取未定义的属性“模型”
【发布时间】:2019-06-20 11:22:03
【问题描述】:

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

对架构进行单元测试(验证验证器)进展顺利。我试图让我的头脑围绕一个简单的 mongoose.method。

托尼

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

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

【问题讨论】:

    标签: mongoose methods sinon


    【解决方案1】:

    在您的架构函数中,当您创建 findUser 函数时,您调用 this.model('User').findOne...。此时,在代码中,您尚未将 UserSchema 设为模型。这是在您创建模型时导出模型的架构文件的底部完成的。

    这是您的问题,因为您试图在创建 User 模型之前访问它。但是让我问一下,你为什么要在你的模型中编写这个函数?此函数与模型交互,它无助于定义它。我的建议是创建一个用户控制器,并在那里导入模型,并在那里编写这个函数。像这样的:

    用户控制器

    const UserModel = require('your-model-here');
    
    function findUser(last, cb) {
      UserModel.findOne({ lname: last }, (err, val) => {
        cb(!!val);
      });
    }

    【讨论】:

      猜你喜欢
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 2015-02-12
      • 2018-06-07
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多