Javascript 如何为特殊测试用例编写可测试代码
我有一个异步readFile(path,callback)函数 第一次读取文件时,它将从文件系统中读取。它会将内容保存到内存中 之后,当读取同一个文件时,它只会从内存中返回内容,而不会再次访问文件系统 我遇到的问题是如何在测试套件中测试这种机制,因为方法调用无法知道内容是否从文件系统或内存返回Javascript 如何为特殊测试用例编写可测试代码,javascript,design-patterns,testing,node.js,Javascript,Design Patterns,Testing,Node.js,我有一个异步readFile(path,callback)函数 第一次读取文件时,它将从文件系统中读取。它会将内容保存到内存中 之后,当读取同一个文件时,它只会从内存中返回内容,而不会再次访问文件系统 我遇到的问题是如何在测试套件中测试这种机制,因为方法调用无法知道内容是否从文件系统或内存返回 如何实现readFile(),使其缓存功能可测试?为什么我以前没有考虑过这一点。我可以向回调传递一个标志(err、content、fromMemory),指示它是来自文件系统还是内存:)您模拟了本机文件开
如何实现readFile(),使其缓存功能可测试?为什么我以前没有考虑过这一点。我可以向回调传递一个标志(err、content、fromMemory),指示它是来自文件系统还是内存:)您模拟了本机文件开启器。为什么不使用调用读取文件,然后修改文件,然后再次尝试读取文件。如果它与第一次相同,但与第二次不同,那么它将起作用。或者,您可以公开它缓存的变量,并对其进行修改和检查。在代码级别,您肯定应该检查内容是否存在于缓存中,如果没有,请转到文件,否则从缓存中读取返回。 此检查可以模拟为在一种情况下返回true,在另一种情况下返回false,您可以围绕此编写测试。
希望我在这里讲得通。我应该告诉你,我不喜欢因为个人原因嘲笑外部服务。但是+1推荐了一种最佳做法。我反对用刀子杀人。但我完全赞成用它们来切蔬菜我的意思是,在正确的工作中使用正确的工具不会错。这是使用模拟的完美案例。同意,模拟几乎总是问题的错误答案,但在这种情况下,它们绝对正确。但是,但是,但是,但是。。。编写此测试的全部目的是希望通过例程验证正确的行为。现在你把验证委托给程序本身!大概您的意思是“…然后修改文件…”。这是一个不用模仿任何东西就可以测试例程的好方法+1.