ES2020 私有 class methods/fields 和测试
ES2020 private class methods/fields and testing
如您所知,ES2020 正在引入私有 class 方法和字段,类似于我们目前在 typescript 中的方法和字段
(尽管关键字不同... TS -> private | JS -> #methodName 或 #fieldName)。
Link 到 RC(第 3 阶段):
https://github.com/tc39/proposal-private-methods
我们目前可以将其与 babel 插件 一起使用:
https://babeljs.io/docs/en/babel-plugin-proposal-private-methods
技术栈:
我使用 Jest 和 Enzyme 进行单元测试。
问题:
我面临的问题是,每当我使用这些字段或方法导入 class 时,我只是尝试引用 wrapper.instance() 调用它们来测试它们,我可以看到私有方法在实例中不可见(这是正确的,因为它是私有的)。
错误示例:#someMethod is undefined
您将如何继续处理这个问题?
你会跳过测试私有方法还是有解决方案?
在调试我的 UT 时,我看到他们的名字有一个前缀 __private_XXX_
,而 XXX 是他们在 class.
中出现的“索引”
因此您可以使用 __private_XXX_someMethod
访问 #someMethod
但这需要您检查该“索引”并在每次 class 更改索引时更新它。
如您所知,ES2020 正在引入私有 class 方法和字段,类似于我们目前在 typescript 中的方法和字段 (尽管关键字不同... TS -> private | JS -> #methodName 或 #fieldName)。
Link 到 RC(第 3 阶段): https://github.com/tc39/proposal-private-methods
我们目前可以将其与 babel 插件 一起使用: https://babeljs.io/docs/en/babel-plugin-proposal-private-methods
技术栈:
我使用 Jest 和 Enzyme 进行单元测试。
问题:
我面临的问题是,每当我使用这些字段或方法导入 class 时,我只是尝试引用 wrapper.instance() 调用它们来测试它们,我可以看到私有方法在实例中不可见(这是正确的,因为它是私有的)。
错误示例:#someMethod is undefined
您将如何继续处理这个问题?
你会跳过测试私有方法还是有解决方案?
在调试我的 UT 时,我看到他们的名字有一个前缀 __private_XXX_
,而 XXX 是他们在 class.
因此您可以使用 __private_XXX_someMethod
访问 #someMethod
但这需要您检查该“索引”并在每次 class 更改索引时更新它。