前言
在前端开发过程中,mock 数据是必不可少的一项工作。在 Node.js 中,我们可以使用 npm 上的 mockery
包,但是这个包在使用与维护过程中均有一些不足。众所周知, mokingoose
是一个相当优秀的模拟库。但是,有些测试用例的警告无法适应 Mongoose 的最新版本,这就导致了一个问题:我们需要在测试用例中使用 mockingoose,但是 mockingoose 无法与最新的 Mongoose 版本一起使用。
在这篇文章中,我们将介绍如何使用 npm 包 mockingoose--temp-fix
来解决这个问题。
什么是 mockingoose--temp-fix
mockingoose--temp-fix
是 mockingoose
的一个分支,它可以与 Mongoose 的最新版本一起使用。
安装
首先,我们需要使用 npm 安装 mockingoose--temp-fix
包和 mongoose
。在命令行窗口中输入以下命令:
npm install mockingoose--temp-fix --save-dev
npm install mongoose --save-dev
使用 mockingoose--temp-fix
在我们开始使用 mockingoose--temp-fix
之前,我们需要理解 mockingoose
如何在 Mongoose 中工作。
当我们使用 Mongoose 进行查询时,它会返回一个具有 Chainable 属性的对象。这些属性可以让我们执行更多操作(如 where、skip、limit 等)。当我们尝试调用它时,如果它不具有 Chainable 属性或者在调用中出错,那么这个查询将会失败。
为了使用 mockingoose--temp-fix
,我们需要将每个 Mongoose 模块导入到模拟的模块中。这意味着对于每个模型,我们需要导出一个用于拦截查询的 Mock。这个 Mock 可以接收任何参数并返回一个具有 Chainable 属性的对象。下面是一个示例:
-- -------------------- ---- ------- ----- -------- - ------------------- ----- -------------- - ---------------------------- ----- ------------- - -------------------------------------- ---------------- - -------------- ----- ------ - --------------- ----- ---------- - --- -------- ----- ------- ------ ------- --------- ------- -------- - ----- -------- -------- ----- -- ----------- - ----- ----- -------- -------- -- -- --------------------------------- - ------- - ---- ------ --------- ---- - -- -------------------------------- - ---------- ---- -- ----- ---- - ---------------------- ----------- -------------- - - ----- -
有了这个导出,我们可以在测试中使用 mockingoose--temp-fix
将其 mock 化。下面是示例:
-- -------------------- ---- ------- ----- ----------- - -------------------------------- ----- - ---- - - ------------------------------- -------------------------- -- -- - ----- ------------ - - ----- ----- ------ ------ ---------------- --------- ---------- - ----------- -- - ------------------- -- ------------ -- - ---------------------- -- ---------- ------ - --- ------ ----- -- -- - ---------------------------------------- ------- ----- ---- - ----- ------------------------ ----------------------------------------------------------- ------------------------------- -- --
在上面的示例中,我们通过将 User
模型传递给 mockingoose--temp-fix
的 toReturn
方法来制作模拟对象。此方法期望返回特定方法('save')的结果,并将 userToCreate 对象作为值返回。
但是,我们需要注意到 mockingoose--temp-fix
并不是完美的。它在实现上是有所不足的,无法将某些操作与 Mongoose 一起使用。在使用 mockingoose--temp-fix
时,有一些操作我们需要自己实现。下面是一个示例:
-- -------------------- ---- ------- ---------- ---- ---- -- ------- ----- -- -- - -- ----------- ---- --- ---- -- - --- - ---- ---------- -- -- ---- -- -------- --------- --- -------- ---- --------- --------- - ---------- -- ------------- ----- ---- - ----- ----------------------------------- ----------------------------------------------------------- ---------------------------------------- ------ ------------------ -- --
在上面的代码中,我们使用 Mongoose 的 API 完全实现了 find 操作。
最后,你应该避免在整个代码库中混合使用 mockingoose--temp-fix
和 mockery
。如果你必须在一个单独的文件中使用 mockery
,请确保文件的依赖项中没有与 mockingoose--temp-fix
冲突的包。
结论
在上文中,我们了解了 mockingoose--temp-fix
正确使用的方法。通过使用这个包,我们能够更优雅的完成前端开发过程中的 mock 数据工作。当然,它也有一些局限性,需要在使用中多加注意和实践。
希望这篇文章对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005761781e8991b448ea8b2