gpt4 book ai didi

javascript - 为功能代码编写测试?

转载 作者:行者123 更新时间:2023-12-02 16:16:26 26 4
gpt4 key购买 nike

举个例子,假设我们正在构建一个简单的缓存。我们可以采用使用闭包的函数式方法:

makeCache = ->
c = {}
(key, fetch) ->
if c[key]
c[key]
else
c[key] = fetch()
c[key]

cache = makeCache()
cache(1, -> 1)

我发现这种方法的问题是您无法轻松测试它。我希望能够检查 '1' 是否在缓存中。如果我添加更多值,我想确保它们也在缓存中。

如果我有一个更复杂的缓存,比如 LRU 缓存,我还想测试其他方面。然而,这些变量完全隐藏在闭包后面。

我倾向于使用闭包来想出解决方案,但随后我采用面向对象的风格,以便其可测试:

class Cache
constructor: ->
@c = {}
get: (key, fetch) ->
if c[key]
c[key]
else
c[key] = fetch()
c[key]

cache = new Cache()
cache.get(1, ->1)

现在我可以访问 cache.c 以及我需要检查测试的任何其他变量。

所以我的问题是,在使用函数式闭包时如何测试代码?

最佳答案

这不会测试您的具体情况吗?

cache = new Cache()
cache.get(1, ->1)
expect(cache.get(1, ->0)).toBe(1);

更普遍的问题是很现实的。但任何封装技术都是如此。不过,我认为测试(或者至少是单元测试)的整个目标是使系统的公共(public)接口(interface)正常工作。因此,如果您没有公共(public)工具来检查缓存中是否有某些内容,那么您就不需要对其进行单元测试。

当然有人不同意这一点,但我发现这是一条明显的分界线。

关于javascript - 为功能代码编写测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29523951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com