gpt4 book ai didi

javascript - 无法 stub 不存在的自有属性 findOne

转载 作者:太空宇宙 更新时间:2023-11-04 01:44:58 24 4
gpt4 key购买 nike

尝试 stub 我的 User mongoose 模型的 findOne 方法,但收到错误无法 stub 不存在的自己的属性 findOne

我在连接器中使用 findOne 方法来获取用户,效果很好。仅在测试中才说该方法不存在:

我可以像这样调用 find一个:

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) 继承后的原型(prototype)中的属性。您可以通过 UserModel.__proto__.findOne 访问原始 findOne 方法。

关于javascript - 无法 stub 不存在的自有属性 findOne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51802051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com