Nic*_*ick 4 mongoose mongodb node.js
我正在对一些依赖于Mongoose模型的代码进行单元测试。我想验证函数是否已传递有效的ObjectId作为参数。我读过可以使用以下方法创建新的ObjectId对象:
var id = mongoose.Types.ObjectId();
Run Code Online (Sandbox Code Playgroud)
但是,以下内容将始终返回false:
var id = mongoose.Types.ObjectId();
mongoose.Types.ObjectId.isValid(id) //false
Run Code Online (Sandbox Code Playgroud)
为什么是这样?是因为我要创建一个没有密钥的新ObjectId实例吗?查看Mongoose源代码,我可以看到mongoose.Types.ObjectId.isValid实际上是在本地mongo模块中定义的。我将继续研究驱动程序,但是如果有人可以立即告诉我为什么发生上述行为,我将不胜感激,可以节省时间:p
谢谢!
isValid是本机驱动程序中BSON 类的文献记录很少的方法ObjectID。
如果查看该方法的源代码,则会发现它希望传入一个字符串,因此需要将其调用为:
mongoose.Types.ObjectId.isValid(id.toString())
Run Code Online (Sandbox Code Playgroud)
但是,正如@HMR在注释中指出的那样,的实现isValid有一个奇怪的怪癖,认为任何 12个字符的字符串都有效。参见来源。
因此,不幸的是,最好使用以下方法自己实施检查:
if (id.toString().match(/^[0-9a-fA-F]{24}$/)) {
// It's a valid ObjectId
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
908 次 |
| 最近记录: |