因此,我创建了一个接受ID的函数,根据返回的数据通过存储库在内部查询数据库,然后根据不同的情况对数据进行突变,然后返回数据。
我将如何对该功能进行单元测试?
是否在存储库层上存根find方法以返回数据,这样我就不必依赖于连接数据库了?
最佳答案
我会争辩说,您只能进行可单元测试的单元测试代码。我对单元可测试代码的定义是具有以下特性的代码:
它从输入中获得了所需的一切
它的所有工作都通过返回值(或引发异常)表示
它不会产生任何副作用
您描述的代码进入数据库违反了#1。
要直接回答您的问题,您可以模拟数据库调用,该模拟将为您的函数提供预期的数据,以便您可以对其进行变异并将其与预期的输出进行比较。
但我认为真正的正确答案是应用单一职责原则重构您的代码。您的测试代码正在做两件事(转到数据库并改变结果),而不是只做一件事。
我会分解数据库部分,并将其分配为“其他人的工作”。那么被测代码可以将该数据库结果作为输入,而其唯一的工作就是对数据进行变异并返回结果。
恕我直言,这将使其可测试。并且当您对其进行单元测试时,您根本不必模拟数据库,因为您可以简单地编写要变异的数据并为其提供功能。
关于node.js - 单元测试查询数据库的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42938197/