6

可以说我有这种情况(架构)

layer1 -> layer2 -> layer3

层只是普通的 node.js 模块(有一些导出的功能)

Layer1 需要 layer2 并调用他的函数,而 layer2 需要 layer3 并调用他的函数。

我想测试 layer1 中的函数,但也要模拟 layer3(我在 layer1 中的函数调用被传播到 layer3 并且我想模拟这个)。

做这个的最好方式是什么?我看过这个模块:https ://github.com/thlorenz/proxyquire但我认为它不支持像我的示例那样深入到 2 级或更高级别时的模拟。

感谢您的任何建议!

4

2 回答 2

1

我使用嘲弄取得了巨大成功,尽管根据您想要嘲弄的内容,它可能会变得非常乏味。

但是,您的设置似乎有点古怪。如果要对第 1 层进行单元测试,则只需要模拟第 2 层,并且第 1 层和第 3 层之间不应有任何(直接)连接。

于 2013-07-10T12:50:39.777 回答
1

其实我错了proxyquire。是的,您可以在您正在测试的原始模块下方 2 或更多深度模拟某些模块,并且它可以正常工作,正如他们在示例中显示的那样。只需将存根与您正在模拟的模块的路径放在一起。如果你在模拟 layer3,stub 的路径必须与 layer2 中写入的 layer3 的路径相同(所以它是相对于 layer2,而不是 layer1 或某个根)。

我们正在进行集成测试,这很困难,因为我们使用的是 mongoDB 数据库,并且没有用于 mongo 的嵌入式数据库。有一些尝试和替代方案,但正如我所见,它们还不够好。所以这是我的问题的根源,我们不得不模拟整个数据层。

在此之前,我们在某些机器上拥有真实数据库,而 CI 服务器 (Jenkins) 上的集成测试正在使用该真实数据库,但这并不是很好,因为您无法在笔记本电脑上运行测试。

因此,模拟应用程序的整个数据层也是非常糟糕的解决方案,但正如我所见,没有其他选择。如果有人有相同或相似的情况,请随时在此处编写您的解决方案。

于 2013-07-13T20:11:27.283 回答