尝试对我的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);
最佳答案
UserModel既没有自己的属性,也没有原型中的findOne属性,因为它没有从Model(mongoose.Model)继承它。
您可以通过UserModel.__proto__.findOne
访问原始的findOne方法。
关于javascript - 无法 stub 不存在的自己的属性(property)findOne,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51802051/