通量商店 - 单元测试
Posted
技术标签:
【中文标题】通量商店 - 单元测试【英文标题】:flux store - unit tests 【发布时间】:2014-11-15 04:37:03 【问题描述】:我正在为几个 Flux 商店编写单元测试,遇到了一个小麻烦。
我的店铺一般是这样建的:
storeObj =
...
_secretsetterfunction = function ()
module.exports storeObj
如您所见,由于 setter 函数在 store 对象之外 - 它不能直接访问。
这带来了一个问题,因为测试/操作商店数据的唯一方法是通过 Action -> Dispatcher -> 事件监听器(从技术上讲,动作可以被删除)这不是我在对商店进行单元测试时想要经历的事情。
另一种方法是将 setter 方法实际放在 store 对象上 - 但这不是我真正想做的事情。
有什么想法吗?
【问题讨论】:
【参考方案1】:我也有这个问题,使用 Jasmine。
我写了一篇博文和示例 repo,介绍了在不使用 Jest 时如何获取对这些私有内部函数的引用:http://bensmithett.com/testing-flux-stores-without-jest/
TL;DR - 使用rewire
【讨论】:
【参考方案2】:操作实际上是商店的公共 api。您只需验证操作的效果即可全面测试您的商店。
【讨论】:
我明白了,它确实有效。但它很快就会变得相当复杂,尤其是使用 waitFor() 命令。 不是真的,其实很简单。您将所有测试设置为超时,调用一个操作,然后您只需等待存储上的更改事件并验证有效负载。没有更简单的方法可以做到这一点。我确实推荐摩卡而不是茉莉花……它对这种事情 afaik 有更好的支持。 我不认为 React 存储之间的依赖关系是一个好主意。使用 CQRS/EventSourcing 原则可以帮助大型团队更好地进行可测试性和扩展。另见***.com/a/25806145/82609 @SebastienLorber 这很有趣,但目前可能远远满足我们的需求。 @FakeRainBrigand 同意,这就是我们目前正在做的事情,但感觉我正在做更多的额外工作来测试这些 - 但我想这是最好的解决方案 atm 【参考方案3】:因此,flux 团队刚刚在一篇博文中解决了这个问题,尽管他们使用的是自己的变体,称为 Jest。仍然值得一读:
http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html?utm_source=javascriptweekly&utm_medium=email
【讨论】:
以上是关于通量商店 - 单元测试的主要内容,如果未能解决你的问题,请参考以下文章