无法存根不存在的自己的财产findOne

时间:2018-08-11 17:21:32

标签: javascript node.js mongoose mocking sinon

尝试对我的User猫鼬模型的findOne方法进行存根,但出现错误Cannot stub non-existent own property findOne

我在连接器中使用findOne方法来获取用户,并且运行正常。只是在测试中说该方法不存在:

我可以打电话找这样的人:

const user = await UserModel
        .findOne({email: email})
        .select(['hash', 'firstName', 'lastName', 'email'])

它返回具有所选属性的用户。

当我尝试在测试中覆盖它时:

import UserModel from '../../models/user'

beforeEach(() => {

  // ...

  myStub = sinon
    .stub(UserModel.prototype, 'findOne')
    .callsFake(() => Promise.resolve(expectedUser))

})

sinon为何有理由认为我的UserModel.prototype没有方法findOne()

我的用户模型

import { isEmail } from 'validator';
import mongoose, { ObjectId } from 'mongoose';
import bcrypt from 'bcrypt';
const Schema = mongoose.Schema;

const UserSchema = new Schema({
    firstName: { type : String, required : true },
    lastName: { type : String, required : true },
    email: { type: String, trim: true, lowercase: true, unique: true, required: 'Email address is required', validate: [ isEmail, 'invalid email' ] },
    hash: { type : String, required : true, select: false },
    refreshToken: { type : String, select: false },
});


// generate hash
UserSchema.methods.generateHash = (password) => bcrypt.hashSync(password, bcrypt.genSaltSync(8), null)

// checking if password is valid
UserSchema.methods.validPassword = (password, hash) => bcrypt.compareSync(password, hash)


export default mongoose.model('User', UserSchema);

1 个答案:

答案 0 :(得分:0)

UserModel 既没有 findOne 属性,也没有它自己的属性,也没有从 Model 继承而来的原型中的属性(猫鼬模型)。 您可以通过UserModel.__proto__.findOne访问原始的findOne方法。